我有一个网站,当按下按钮时,它会对服务器端脚本进行 AJAX 调用。唯一的问题是用户可以在地址栏中输入以下内容:
javascript:callAjaxRoutine();
如何防止这种情况发生?
最佳答案
评论中的人说你永远无法让某人 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)})})();
函数越大,阅读和理解就越困难。如果你有像 firebug 这样的工具,你可以把它拆开,但这确实很痛苦,所以你会劝阻大多数人。
关于javascript - 如何阻止用户使用 javascript 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16113431/