我有一个网站,当按下按钮时,它会对服务器端脚本进行 AJAX 调用。唯一的问题是用户可以在他们的地址栏中输入以下内容:
javascript:callAjaxRoutine();
如何防止这种情况发生?
问问题
86 次
1 回答
1
评论中的人说得对,你永远无法 100% 让某人脱离你的代码,但你可以做一些事情来避免那些不太严重的人:
- 将您的函数封装在一个对象中,使其不在全局命名空间中,
- 混淆你的代码
没有 1
就是这样做的一个例子:(这里我打算用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
定义了。
2号
将您的代码通过像http://jscompress.com这样的缩小/混淆器- 上面的第二段代码变为:
(function(){var e=function(){ajax()};$("#button").on("click",function(){e.apply(this)})})();
函数越大,越难阅读和理解。如果你有像萤火虫这样的工具,你可以把它拆开,但这样做真的很痛苦,所以你会劝阻大多数人。
于 2013-04-19T22:31:31.097 回答