MVC3ブックでJQueryを学習しています。私は、Jsonのデータは本当に使いやすいと思っていますが、安全ではないかもしれません。JQueryオートコンプリートGETおよびJSON配列のデータセキュリティの問題
シナリオを考えてみましょう。例えば、私はセンシティブな顧客情報を持つCRMを持っています。 AjaxはJson配列を検索結果として返します。検索テキストボックスajaxオートコンプリートは、データベースからセンテイブキーワードのJson配列も返します。等。彼らはすべてGETメソッドを使用します。
しかし、JSON配列データの周りに渡すとき、GETメソッドは、脆弱性を持っていると言われて:
http://haacked.com/archive/2009/06/25/json-hijacking.aspx
http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx
どのようにjQueryの専門家は、そこにこの問題を修正については行くのですか?助けてください。
---編集:---
@グレン。驚くばかり。ありがとうございました。あなたのヒントに基づいて、ここで私は理解したものです。 JSON配列
を包んでMOD 1を返す
- 通常のオートコンプリートは、私たちがcontroller.csにtxtlstという名前のグローバルリストを得たと仮定すると、コードであります.cshtmlファイルに...
// normal one public JsonResult AutoCompleteHelper1(string term) { //if (!Request.IsAjaxRequest()) return null; var lst = txtlst.Where(s => s.StartsWith(term)).ToList(); var res = lst.Select(x => new { value = x }).ToList(); return Json(res, JsonRequestBehavior.AllowGet); } //mod one public JsonResult AutoCompleteHelper2(string term) { //if (!Request.IsAjaxRequest()) return null; var lst = txtlst.Where(s => s.StartsWith(term)).ToList(); var res = lst.Select(x => new { value = x }).ToList(); return Json(new { wrapper= res, name="wrapper" }, JsonRequestBehavior.AllowGet); } }
、その後...
<p>Auto Complete Example</p> <input type="text" name="q" id="MyInput1" data-autocomplete-source="@Url.Action("AutoCompleteHelper1", "Home")"/> <input type="text" name="q" id="MyInput2" data-autocomplete-source="@Url.Action("AutoCompleteHelper2", "Home")" />
してから.jsファイル内...
$(document).ready(function() { // normal autocomplete $("#MyInput1").autocomplete({ source: $("#MyInput1").attr("data-autocomplete-source") }); // mod autocomplete with a wrap $("#MyInput2").autocomplete({ source: function (req, add) { $.getJSON($("#MyInput2").attr("data-autocomplete-source"), req, function (data) { var suggestions = []; $.each(data.wrapper, function (i, o) { suggestions.push(o.value); }); add(suggestions); }); } }); });
--- EDIT 2:---
POSTを使用するように私に言っているそれらのコメントを無視してください。彼らは はブログのリンクを読んでいないか、問題を理解していません。
まず、GETを使用する代わりにPOSTを使用してください – Jorge
あなたはそれを検証するために何らかの種類のキーを送信するポストリクエストを使うことができます...これらの例は、あなたのサーバーへの攻撃ではなく、ユーザーに対する攻撃です;ユーザーは一般的に、セキュリティに関しては最も弱いリンクです。 – JKirchartz
@Tomその後、別のコントロールを使用します。 AJAX HTTPリクエストに使用されるメソッドは、最終的にはあなたの決定です。既製のツールが適切なことをしない場合は、別のツールを見つけたり、独自のツールを実装したりしてください。 – Pointy