3

私は現在、かなり堅牢なサーバー側の検証システムを導入していますが、すべての角度をカバーしていることを確認するためのフィードバックを探しています. 現時点で私が行っていることの簡単な概要は次のとおりです。

  • 入力が空でないこと、または長すぎることを確認してください

  • SQL インジェクションを防ぐためにクエリ文字列をエスケープする

  • 正規表現を使用して無効な文字を拒否する (これは送信される内容によって異なります)

  • <script> などの特定の html タグのエンコード (すべてのタグはデータベースに格納されるときにエンコードされ、一部はページでレンダリングするためにクエリが実行されるときにデコードされます)

足りないものはありますか?コード サンプルまたは正規表現を歓迎します。

4

5 に答える 5

8

SQL インジェクションを防ぐためにクエリ文字列を「エスケープ」する必要はありません。代わりに、準備されたステートメントを使用する必要があります。

理想的には、入力フィルタリングは他の処理の前に行われるため、常に使用されることがわかります。それ以外の場合は、問題に対して脆弱になるために 1 つの場所を見逃すだけでよいからです。

XSS 攻撃を防ぐために、出力時に HTML エンティティをエンコードすることを忘れないでください。

于 2008-09-28T22:06:48.993 に答える
2

「無効な」タグだけでなく、すべての html タグをエンコードする必要があります。これは熱い議論ですが、基本的には、正しく処理するのを忘れる無効な HTML の組み合わせが常に存在するということです (ネストされたタグ、一部のブラウザーが「正しく」解釈するタグの不一致など)。したがって、私の意見では、すべてを htmlentities として保存し、出力時に検証済みの HTML セーフ サブセット ツリーを (エンティティとして) コンテンツから出力するのが最も安全なオプションです。

于 2008-09-28T21:57:45.473 に答える
1

この質問/回答には、あなたが探しているいくつかの良い回答があります
PHP指向ですが、言語/プラットフォームを指定しておらず、その一部はphpの世界を超えて適用されます):

PHPでユーザー入力をサニタイズするための最良の方法は何ですか?

于 2008-09-28T23:02:11.670 に答える
1

タスク専用のライブラリですべてのサーバー側検証を実行して、1 つの領域の改善がすべてのアプリケーションに影響するようにします。

さらに、ディレクトリ トラバーサルやシェルへのアクセス試行などの既知の攻撃に対する作業も含まれます。

于 2008-09-28T21:58:43.303 に答える
1

データ フィルタリング用のFilter Extensionをチェックアウトすることもできます。完全に気密性が保証されるわけではありませんが、個人的には、そのコードには非常に多くの目玉があるため、これを使用する方がはるかに優れていると感じています.

また、準備済みステートメントの補助を検討してください。SQL クエリでデータをエスケープすることは過去のものです。

于 2008-09-29T07:41:57.257 に答える