自分のページでコメント投稿を有効にしたいので、投稿を送信してデータベースに挿入する前に、HTMLエンコーディングを実行する必要があります。
これの理想的な側面は何ですか?
サーバー側(私はasp.netで動作します)またはクライアント側(javascript)?
自分のページでコメント投稿を有効にしたいので、投稿を送信してデータベースに挿入する前に、HTMLエンコーディングを実行する必要があります。
これの理想的な側面は何ですか?
サーバー側(私はasp.netで動作します)またはクライアント側(javascript)?
ユーザー入力をサニタイズすることを意味する場合、それを安全に実行できる唯一の場所はサーバー側です。クライアント側で何かが行われたことを確認することはできません。クライアント側のコードをバイパスするのは簡単すぎます。
これはデータ検証のようなものです。クライアントでデータ検証(たとえば、フォームのキーフィールドに有効な値が入力されていることを確認する)を行うのは良いことです。これは、即時のフィードバックが優れたユーザーエクスペリエンスをもたらすためですが、そうすることは代替手段ではありません。クライアント側の検証をバイパスするのは簡単なので、サーバー上でそれを行うために。
しかし、入力をサニタイズすることで、クライアント側でそれを実行しようとさえしたくありません。消毒されていないと想定し、サーバー上で消毒します。
ASP.Netでは、サニタイズする入力が後でHTMLページに表示する文字列であり、独自のHTMLタグが含まれていないことを確認する場合はHttpServerUtility.HtmlEncode
、文字列のエンコードに使用できます。 (基本的には、などに変わり<
ます<
)。
間違いなく、サーバー側です。ただし、データベースに入力する前ではなく、ブラウザに出力する前に入力をエンコードします。
ASP .NET MVCを使用している場合は、ヘルパーメソッドを使用できます。
<%= Html.Encode("user comment with html in it <script>alert('bad')</script>") %>
NET4フレームワークでASP.NET(WebフォームまたはMVC)を使用している場合は、新しい構文を使用できます。
<%: "user comment with html in it <script>alert('bad')</script>" %>
確かにあなたはと行くべきserver side
です。
クライアント側で行う場合、ユーザーは使用している暗号化を簡単に取得できます。
サーバー側の場合。より安全である必要があります。
これを行う方法は、ユーザーが入力する可能性のあるすべてのユーザーに対して、ページをUTF-8で保持することです。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
出力のヘッダーに入れ、データベースもユニコードで保持します。ユーザーが何を入力しようとしているのかを確認することはできません。
mysql_real_escape_string
すべてのデータベーススタックは、PHPのMySQL関数など、悪意のあるコンテンツを回避する手段も提供します。