1

PHPには、次の正規表現があります。

$regexp = "/^([-a-z0-9.,!@'?_-\s])+$/i";

ウェブサイトの連絡フォーム (具体的にはメッセージ フィールド) を検証して、厄介なコードが入力されていないことを確認しようとしています。私が抱えている問題は、特定の通常の句読点と文字を許可する必要があることですが、それらが悪意のあるコードの挿入に使用されるのではないかと心配しています。

上記の表現に従わない文字については、安全にするために置き換えたいと思います。2 つの質問:

  1. 交換はどうすればいいですか?
  2. キャラクターは何と交換すればいいですか?たとえば、私は括弧を許可していません( )。このように置き換えるのがベストプラクティス"(" ")"でしょうか\( \)?

編集

データはメールアドレスに送信され、データベースに保存されます

4

2 に答える 2

1

えーと、フォームの送信後にphpスクリプトに到達するとすぐに、すべての文字を連絡先フォームに挿入して、すべてをhtmlentitiesに変換することを許可しませんか?そうすれば、ユーザーは自分の言いたいことを言うことができ、「悪意のあるコード」に問題はありません:)

And do not forget to use a proper database wrapper (PDO)
or at least escape when inserting into the database.

– knittl

編集:もう一度強調するためにKnittlの引用を追加しました:)

于 2013-02-07T16:12:15.040 に答える
0

フィルタ拡張機能を使用します。具体的には、サニタイズフィルターfilter_input()で関数を使用します。例えば:

$message = filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING);

これにより、メッセージからタグが削除され、より安全に処理できるようになります。

ただし、100%安全であると見なす必要があるという意味ではありません。メッセージをデータベースに保存するとき(データベースドライバのescapeメソッドを使用する、メッセージから不要/不要/疑わしいものを削除するなど)、およびクライアントに安全に出力できることを確認するために、引き続き注意を払う必要があります。 。

于 2013-02-08T03:22:42.623 に答える