MVC3の本でJQueryを学んでいます。Json データは非常に使いやすいと思いますが、安全ではない可能性があります。
たとえば、機密性の高い顧客情報を含む CRM を入手したとします。Ajax は検索結果として Json 配列を返します。検索テキストボックス ajax オートコンプリートは、データベースから機密性の高いキーワードの Json 配列も返します。etc...すべてGETメソッドを使用しています。
ただし、GET メソッドには Json 配列データを渡す際に脆弱性があると言われています。
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 配列を返す通常のオートコンプリート
- そして、配列をラップするjsonオブジェクトを持つmodのもの
controller.cs で txtlst という名前のグローバル リストを取得したと仮定して、コードを次に示します...
// 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);
}
}
そして.cshtmlファイルで...
<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);
});
}
});
});
--- 編集 2: ---
POST を使用するように指示しているコメントは無視してください。彼らはブログのリンクを読んでいないか、問題を理解していません。