PHPフォームのセキュリティとXSS攻撃
3589 ワード
まずW 3 SCHOOLの説明を転載します
フォームのHTMLコードは次のとおりです.
このフォームをコミットすると、method=「post」でフォームデータが送信されます.
何が$SERVER["PHP_SELF"]変数?
$_SERVER["PHP_SELF"]は、現在実行されているスクリプトのファイル名を返すスーパーグローバル変数です.
したがって、$SERVER["PHP_SELF"]は、別のページにジャンプするのではなく、フォームデータをページ自体に送信します.これにより、ユーザはフォームページでエラーメッセージを取得することができる.
htmlspecialchars()関数とは?
htmlspecialchars()関数は、特殊文字をHTMLエンティティに変換します.これは、などのHTML文字が<和>に置き換えられることを意味します.これにより、攻撃者がフォームにHTMLまたはJavaScriptコード(サイト間スクリプト攻撃)を注入することによってコードを利用することを防止することができる.
PHPフォームのセキュリティに関する重要なヒント
$_SERVER["PHP_SELF"]変数はハッカーに利用できる!
ページにPHPを使用している場合はSELFは、ユーザが下線を入力してサイト間スクリプト(XSS)を実行することができる.
ヒント:クロスサイトスクリプト(Cross-site scripting,XSS)は、Webアプリケーションでよく見られるコンピュータセキュリティの脆弱性のタイプです.XSSは、攻撃者が他のユーザが閲覧したページにクライアントスクリプトを入力できるようにする.
PS:本来はCSSと略すべきで、積層様式表CSSと略して名前を変えてからXSSと呼ばれています.汗!
再PS:XSS攻撃は非永続型攻撃(Non-persistent XSS)と永続型攻撃(Persistent XSS)の2種類に分けられ、非永続型攻撃は使い捨てであり、今回のページアクセスのみに影響を与える.永続的な攻撃は攻撃者のデータをサーバ側に格納し、攻撃行為は攻撃データとともに常に存在する.
「test_form.php」というページに次のフォームがあるとします.
ラベルにJavaScriptコードを追加できることに気づくべきです!</strong>ハッカーは、ユーザーを別のサーバ上のファイルにリダイレクトすることができます.このファイルの悪意のあるコードは、グローバル変数を変更したり、フォームを他のアドレスに送信してユーザーデータを保存したりすることができます.</p>
<p><br></p>
<p><strong>$_を回避する方法SERVER["PHP_SELF"]が利用されていますか?</strong><br></p>
<p>htmlspecialchars()関数を使用することで$_を回避できます.SERVER["PHP_SELF"]が利用されています.</p>
<p>フォームコードは、</p>
<p></p>
<pre><code class="language-php"><form method = "post"action = "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"></code></pre>htmlspecialchars()関数は、特殊文字をHTMLエンティティに変換します.現在、ユーザがPHP_を利用しようとするとSELF変数は、次のような出力になります.
<p></p>
<p></p>
<pre><code class="language-php"><form method = "post"action = "test_form.php/"><script>alert('hacked')">
利用できない、危害がない!
PHPによるフォームデータの検証
私たちが最初にしなければならないことはPHPのhtmlspecialchars()関数を通じてすべての変数を伝達することです.
htmlspecialchars()関数を使用した後、ユーザーがテキストフィールドに次の内容をコミットしようとした場合:
このコードがページまたはe-mailに表示されるのは安全です.
ユーザーがフォームを提出するとき、私たちは2つのことをします.
1.(PHP trim()関数により)ユーザ入力データに不要な文字(余分なスペース、タブ、改行)を除去する
2.(PHP stripslashes()関数により)ユーザー入力データのスラッシュを削除()
実際のプログラミングテストではブラウザが反応していないことがわかりましたが、Chromeブラウザが簡単なXSSスクリプトを自動的にブロックし、consoleでエラーメッセージを出しているため、IE 8でテストした後、一部は正常で、警告ボックスをポップアップしてXSSの動作を発見し、さらにテストしていないようです.
フォームのHTMLコードは次のとおりです.
このフォームをコミットすると、method=「post」でフォームデータが送信されます.
何が$SERVER["PHP_SELF"]変数?
$_SERVER["PHP_SELF"]は、現在実行されているスクリプトのファイル名を返すスーパーグローバル変数です.
したがって、$SERVER["PHP_SELF"]は、別のページにジャンプするのではなく、フォームデータをページ自体に送信します.これにより、ユーザはフォームページでエラーメッセージを取得することができる.
htmlspecialchars()関数とは?
htmlspecialchars()関数は、特殊文字をHTMLエンティティに変換します.これは、などのHTML文字が<和>に置き換えられることを意味します.これにより、攻撃者がフォームにHTMLまたはJavaScriptコード(サイト間スクリプト攻撃)を注入することによってコードを利用することを防止することができる.
PHPフォームのセキュリティに関する重要なヒント
$_SERVER["PHP_SELF"]変数はハッカーに利用できる!
ページにPHPを使用している場合はSELFは、ユーザが下線を入力してサイト間スクリプト(XSS)を実行することができる.
ヒント:クロスサイトスクリプト(Cross-site scripting,XSS)は、Webアプリケーションでよく見られるコンピュータセキュリティの脆弱性のタイプです.XSSは、攻撃者が他のユーザが閲覧したページにクライアントスクリプトを入力できるようにする.
PS:本来はCSSと略すべきで、積層様式表CSSと略して名前を変えてからXSSと呼ばれています.汗!
再PS:XSS攻撃は非永続型攻撃(Non-persistent XSS)と永続型攻撃(Persistent XSS)の2種類に分けられ、非永続型攻撃は使い捨てであり、今回のページアクセスのみに影響を与える.永続的な攻撃は攻撃者のデータをサーバ側に格納し、攻撃行為は攻撃データとともに常に存在する.
「test_form.php」というページに次のフォームがあるとします.
現在、ユーザーがアドレスバーの正常なURLに入った場合:"http://www.example.com/test_form.php」を選択すると、上のコードは次のように変換されます.
到目前,一切正常。
不过,如果用户在地址栏中键入了如下URL:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
この場合、上記のコードは次のように変換されます.alert('hacked')
このコードには、スクリプトとプロンプトコマンドが追加されています.このページをロードすると、JavaScriptコードが実行されます(プロンプトボックスが表示されます).これはPHPについてですSELF変数がどのように利用されるかの簡単な無害なケース.ラベルにJavaScriptコードを追加できることに気づくべきです!</strong>ハッカーは、ユーザーを別のサーバ上のファイルにリダイレクトすることができます.このファイルの悪意のあるコードは、グローバル変数を変更したり、フォームを他のアドレスに送信してユーザーデータを保存したりすることができます.</p>
<p><br></p>
<p><strong>$_を回避する方法SERVER["PHP_SELF"]が利用されていますか?</strong><br></p>
<p>htmlspecialchars()関数を使用することで$_を回避できます.SERVER["PHP_SELF"]が利用されています.</p>
<p>フォームコードは、</p>
<p></p>
<pre><code class="language-php"><form method = "post"action = "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"></code></pre>htmlspecialchars()関数は、特殊文字をHTMLエンティティに変換します.現在、ユーザがPHP_を利用しようとするとSELF変数は、次のような出力になります.
<p></p>
<p></p>
<pre><code class="language-php"><form method = "post"action = "test_form.php/"><script>alert('hacked')">
利用できない、危害がない!
PHPによるフォームデータの検証
私たちが最初にしなければならないことはPHPのhtmlspecialchars()関数を通じてすべての変数を伝達することです.
htmlspecialchars()関数を使用した後、ユーザーがテキストフィールドに次の内容をコミットしようとした場合:
location.href('http://www.hacked.com')
コードは、エスケープコードとして保存されるため、実行されません.<script>location.href('http://www.hacked.com')</script>
このコードがページまたはe-mailに表示されるのは安全です.
ユーザーがフォームを提出するとき、私たちは2つのことをします.
1.(PHP trim()関数により)ユーザ入力データに不要な文字(余分なスペース、タブ、改行)を除去する
2.(PHP stripslashes()関数により)ユーザー入力データのスラッシュを削除()
実際のプログラミングテストではブラウザが反応していないことがわかりましたが、Chromeブラウザが簡単なXSSスクリプトを自動的にブロックし、consoleでエラーメッセージを出しているため、IE 8でテストした後、一部は正常で、警告ボックスをポップアップしてXSSの動作を発見し、さらにテストしていないようです.