私はBloggers
とBlogs
を持っています。各blog
はblogger
に関連付けられています。 Jennellのblog
最初のtitle
属性は、特定の状況で適切にサニタイズされていない場合にトリガすることができ、いくつかのJavaScriptを持っていることを選択ボックス内のオプションを更新するAJAX応答をサニタイズ
注意:ここではブログのレコードの画像です。
これはまさにそのような状況の1つです。最初の選択ボックスについては
:私は、2つの選択ボックスを持っているユーザーはBlogger
選びます。これが発生した場合:
- をAJAXリクエストがその選択
Blogger
- のために関連付けられている
Blogs
のすべてをつかむためにサーバーに送信されます、サーバーはそのblogger
に関連付けられているすべてのblogs
をつかみ、背中要求者に送信し AJAXリクエストのため
- 応答は
- AJAXリクエストに対する応答は、次にGであったこと
Blog
選択ボックス全てblogs
のオプションとして追加Blog
選択ボックス内のすべてのオプションを削除しますサーバー上で騒々しい。
Jennellという名前Blogger
はjavascriptのハックが含まれていtitle
と関連するblog
を持っています。したがって:Jennell Blogger
が選択されますとき:
Blog
内ハック
が実行されます:
:ここは、AJAX要求の実際のコードです
$("body").on('change', '[data-action="blogger_sel"]', function() {
var blog_sel = $(this).closest('[data-parent-for="blog_sel"]').find('[data-action="blog_sel"]');
$.ajax({
url: "/blogs",
type: "GET",
data: {blogger_id: $(this).val()},
success: function (data) {
blog_sel.children().remove();
$.each(data, function (index, value) {
/* DO NOT APPEND THIS WAY. VULNERABLE TO USER-ENTERED JAVASCRIPT EXECUTING */
blog_sel.append('<option value=' + value.id + '>' + value.title + '</option>');
});
}
})
});
AJAXリクエストの問題はこの部分です:
value.title
私はそれを浄化する必要があります。
質問:AJAXの回答:value.title
はどのようにして浄化できますか?
あなたは、データベースに挿入する前にコンテンツをサニタイズする必要があり、あなたは(質問のこの種を尋ねることはありませんデータクライアント側をサニタイズする)。単純に、 'title'のためにタグを許可しません。 – skobaljic
@skobaljicそれは良い点です。しかし、これはもっと練習です。私はそれをより現実的にすることを推測する:それにいくつかのハックを持つ巨大なデータベースがあるとふりをする。私たちはタグの属性を浄化しますが、何らかの理由で古いデータを浄化することはできませんので、クライアント側でそれを消毒します。 – Neil
あなたの質問は、あなたが既に[回答](http://stackoverflow.com/questions/822452/strip-html-from-text-javascript)を持っているので、「あなたが既にタグを文字列から取り除く方法」でなければなりません。 jQuery 'text()'メソッドです。 Javascriptを使用して出力をサニタイズする方法を尋ねることは、ほとんど起こりませんので、混乱する可能性があります。 – skobaljic