HTMLに任意の変数を挿入する場合、ブラウザに変数自体をHTMLとして解釈させない限り、その変数で使用するのが最適htmlspecialchars()
です。特に、ハッカーがページに任意のHTMLを挿入するのを防ぎます。
の値は$_SERVER['PHP_SELF']
、ブラウザに入力されたURLから直接取得されます。したがって、なしhtmlspecialchars()
で使用すると、ハッカーがコードの出力を直接操作できるようになります。
たとえば、私があなたにリンクを電子メールで送信しhttp://example.com/"><script>malicious_code_here()</script><span class="
、あなたが持っている<form action="<?php echo $_SERVER['PHP_SELF'] ?>">
場合、出力は次のようになります。
<form action="http://example.com/"><script>malicious_code_here()</script><span class="">
私のスクリプトが実行され、あなたは賢くなりません。ログインしている場合は、Cookieを盗んだか、ページから機密情報を取得した可能性があります。
ただし、を使用した場合<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>">
、出力は次のようになります。
<form action="http://example.com/"><script>cookie_stealing_code()</script><span class="">
フォームを送信すると、奇妙なURLが表示されますが、少なくとも私の邪悪なスクリプトは実行されませんでした。
一方、を使用<form action="">
した場合、リンクに何を追加しても出力は同じになります。これは私がお勧めするオプションです。