This question already has answers here:
Security risk in using jQuery Ajax
                                
                                    (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