1

我有一个网站,当按下按钮时,它会对服务器端脚本进行 AJAX 调用。唯一的问题是用户可以在他们的地址栏中输入以下内容:
javascript:callAjaxRoutine(); 如何防止这种情况发生?

4

1 回答 1

1

评论中的人说得对,你永远无法 100% 让某人脱离你的代码,但你可以做一些事情来避免那些不太严重的人:

  1. 将您的函数封装在一个对象中,使其不在全局命名空间中,
  2. 混淆你的代码

没有 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 回答