(*) が付いているチェック項目は、該当する問題の根本的な解決策であることを示しており、これらの内容を完了するように最善を尽くしてください。 (*) の付いていないものは、安全上の問題を完全に排除することはできませんが、この方法によってのみ安全上の問題が回避できることを示します。
SQLインジェクション
(*) SQL文を結合する場合はSQL変数バインディング機能を使用してください。
(*) データベースが変数バインディングを提供していない場合は、SQL を構成するすべての変数をエスケープする必要があり、エラー メッセージがそのままブラウザに表示されません。
データベースにアクセスするユーザーに適切な権限を設定します。
オペレーティング システムのコマンド ライン インジェクション
(*) シェル コマンドを開始できる言語の使用は避けてください。シェル コマンドの開始が許可されている場合は、関数のパラメータ内のすべての変数をチェックして、正当な操作のみが含まれていることを確認する必要があり、パス名パラメータはチェックしません。ディレクトリトラバーサル。
(*) 外部から渡されたパラメータを直接ファイル名として使用しないでください。
(*) ファイルを開く操作を固定ディレクトリに制限し、ファイル名にパスが含まれることを禁止します。ファイル名セッション管理の問題を確認します。
(*) セッションIDとして推測しにくい内容を使用する
(*) URLにセッションIDを保存しないでください。
(*) httpsプロトコルで使用するCookieにセキュア属性を設定します。
(*) ログイン成功後に新しいセッションを生成します
(*) ログイン成功後はセッションIDに加えてシークレット情報を生成し、ページにアクセスするたびに確認してください。セッションIDは固定値を使用しないでください。
セッションIDをCookieに保存する際に有効期限を設定する クロスサイトスクリプティング攻撃(XSS)
HTMLコンテンツの入力が許可されていない場合の解決策
(*) ページに出力されるものはすべてエスケープする必要があります
(*) URLを出力する場合、「http://」または「https://」で始まるURLのみが許可されます。
(*) <script>…</script> コンテンツを動的に生成しないでください。
(*) HTMLコンテンツの入力が許可されている場合、外部Webサイトからスタイルシートを読み込まないでください。
(*) 入力 HTML コンテンツを解析し、解析ツリーを生成し、スクリプトを使用して入力 HTML コンテンツ内の該当する文字列を削除する 一般的な解決策。
(*) Cookie 情報の漏洩を避けるために、応答の HTTP ヘッダーの Content-Type の charset 属性を再指定し、すべての Cookie に対して Trace メソッドを無効にし、HttpOnly 属性を設定する必要があります。 (CSRF)
(*) すべてのページは POST 経由でアクセスされます。送信後のページでは、前のページの隠し部分に情報がランダムに生成され、情報が正しい場合にのみ実行されます。
(*) 業務実行前に再度パスワードを要求する
(*) Referer が正しいか確認し、正しい場合のみ重要な操作を行い、あらかじめ設定したメールアドレスにメールを送信します。
HTTPヘッダーインジェクション
(*) HTTPヘッダを直接出力せず、実行環境が提供するヘッダ情報出力APIを使用します。
(*) APIを使用できない場合は、入力ヘッダ情報の改行をすべて禁止する必要があります。メールの盗難(攻撃者が指定したアドレスに何らかの手段でメールを送信する)。
(*) メールヘッダ情報として外部パラメータを使用しないでください。外部パラメータを使用してヘッダ情報を設定する必要がある場合は、危険な文字を削除してください。
著作権に関する声明: 自由に転載できますが、転載する場合は原作者のチャーリーを引用する必要があります。
元のリンク: http://tech.idv2.com/2008/04/19/secure-website-checklist/
特定のアプリケーション戦略のリファレンス: PHP Practice Security Checklist