6

ユーザーが単一のテキスト入力からデータベースを検索できるようにしていますが、ユーザーが指定した一部の文字列をフィルタリングするのに苦労しています。

たとえば、ユーザーが送信した場合:

��������� lcd SONY

(? に注意してください) 検索をキャンセルする必要があります。

簡単に実行できるように、上記の文字列の base64 エンコード バージョンを含めます。

print(base64_decode("1MfLxc/RwdPHIGxjZCBTT05Z"));

以前はそのような入力を無視していましたが、現在 (理由はわかりません) mysql データベース クエリの実行にほぼ永遠に時間がかかっていることに気付いたので、これは優先度が高くなりました。

utf-8 と mb_detect_encoding を使用していることを強調する別の例は、あまり役に立ちません。

print(base64_decode("zqDOm8+Fzr3PhM63z4HOuc6/IM+Bzr/Phc+HzyU="));
ΠΛυντηριο ρουχ�%

そう:

  • これらの入力を検出/フィルタリングするにはどうすればよいですか?
  • この入力はどのように生成されていますか?
4

2 に答える 2

1

本当にフィルタリングしたい場合は(私はお勧めしません)、英数字や「-.;」などをチェックしてください。

これらの関数のいくつかを使用して、フィルタリングプロセスに役立てることができます。

http://www.php.net/manual/en/function.ctype-alnum.php

于 2010-04-12T15:52:54.933 に答える
0

mysqlへの接続を作成した後にこれらのクエリを実行すると、utf-8入力を処理し、?を吐き出すことなく結果を正常に処理する必要があります。

mysql_query("SET character_set_client=utf8", $mysqlConn);
mysql_query("SET character_set_connection=utf8", $mysqlConn);
mysql_query("SET character_set_results=utf8", $mysqlConn);

(データベースがutf-8に設定されていて、?に変換されない場合はフィルタリングしなくてもかまいません)

(また、mysqlを使用していると仮定すると、他のdbmsにも同様の機能がある可能性があります)

于 2010-04-12T16:51:19.230 に答える