ユーザーがコンテンツをアップロードするサイトがあり、アップロードしたものに名前を付けることができます。一部のユーザーの名前に「&」が含まれているため、HTML検証エラーが発生します。「&」をそのままにして、ページを検証する方法はありますか?これは非常に役立ちます。そうでない場合、ページを検証できるようにするために他にどのような対策を講じることができますか?ありがとう!
2 に答える
いいえ、無効なコンテンツでページを検証する方法はありません。
また、コンテンツを適切にエンコードせずに表示しないでください。
叫んで申し訳ありませんが、あなたのサイトはクロスサイトスクリプティング攻撃に対して広く開かれています。誰でも名前に有害なコンテンツを入れることができ、それは他の人々のブラウザで実行されます。
これをどのように行うかは、使用しているプラットフォームによって異なります。たとえば、ASP.NET Webフォームでは、このServer.HtmlEncode
メソッドを使用して文字列をHTMLエンコードします。ASP.NET MVCでは、同じものを使用するか、<%: %>
それを自動的に実行するサーバータグを使用します。
PHPでは、 htmlentitiesメソッドを使用する必要があります。
<?= htmlentities($username, ENT_QUOTES) ?>
ユーザーが入力した場合、どちらが出力されますme&myself
か(htmlページに値を表示する正しい方法)me&myself
常に常に常にユーザー入力をサニタイズします。クライアントのブラウザから送信されたデータを絶対に信用しないでください。誰かがフォームフィールドに何かを入力した場合は、データベースクエリに直接貼り付けないでください(のようなものでサニタイズしますmy_real_escape_string($user_input)
)。最初にクライアントから送信されたテキストをブラウザに直接印刷しないでください。常にエスケープしてください(を使用してhtmlentities
)。
これを行う理由は、悪意のあるユーザーが、JavaScriptを起動するデータを送信し、他の顧客からデータをフィッシングまたは盗むことによって、サイトに対してクロスサイトスクリプティング攻撃を実行する可能性があるためです。私の名前を設定すると、<script type='javascript' src='http://mysite.com/bad-js.js' />
そのページをロードした人は誰でも、Cookieとセッションにアクセスできる、未知の潜在的に悪意のあるjavascriptをブラウザで実行することになります。