我有一个网站,当按下按钮时,AJAX会调用服务器端脚本。唯一的问题是用户可以在地址栏中键入以下内容:
javascript:callAjaxRoutine();
我该如何防止这种情况发生?
答案 0 :(得分:1)
评论中的人说你永远无法100%地从你的代码中找到某人,但是你可以做一些事情来抵御那些不太严肃的人:
是这样做的一种情况:(我将在这里使用jQuery,但它不是必需的,只是缩短代码)
而不是:
<script>
var callAjaxRoutine = function () {
// Do ajax
ajax();
}
$('#button').on('click', callAjaxRoutine);
</script>
将该函数从全局命名空间中取出并将其放在对象中:
<script>
// This sets up an object containing a self-executing function
(function () {
var callAjaxRoutine = function () {
// Do ajax
ajax();
}
$('#button').on('click', function () {
callAjaxRoutine.apply(this);
});
}());
</script>
第二批代码将与第一批代码相同,但在触发事件时仍会调用代码,但在控制台中输入callAjaxRoutine
将显示undefined
,因为关闭了仅存在用于声明和指定callAjaxRoutine
作为#button.click()
javascript:callAjaxRoutine();
将无法执行任何操作,因为无法再定义callAjaxRoutine
。
将代码放入像http://jscompress.com这样的缩小/混淆器中 - 上面的第二批代码变为:
(function(){var e=function(){ajax()};$("#button").on("click",function(){e.apply(this)})})();
功能越大,阅读和理解就越困难。如果你有一个像firebug这样的工具你可以把它拆开,但这真的很痛苦,所以你最劝阻。