This question already has answers here:
Security risk in using jQuery Ajax
(6个答案)
6年前关闭。
我有一个网站,当按下按钮时,该网站会向服务器端脚本进行AJAX调用。唯一的问题是用户可以在其地址栏中键入以下内容:
如何防止这种情况发生?
您可以将函数从全局名称空间中取出,并将其放入对象中:
第二批代码与第一批代码的功能相同,在触发事件时仍会调用该代码,但是在控制台中键入
2号
将您的代码通过像http://jscompress.com这样的缩小/混淆器-上面的第二批代码变为:
功能越大,阅读和理解就越困难。如果您拥有萤火虫之类的工具,可以将其拆开,但这确实是一件很痛苦的事,所以您会劝阻大多数人。
(6个答案)
6年前关闭。
我有一个网站,当按下按钮时,该网站会向服务器端脚本进行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)})})();
功能越大,阅读和理解就越困难。如果您拥有萤火虫之类的工具,可以将其拆开,但这确实是一件很痛苦的事,所以您会劝阻大多数人。
07-26 02:25