javascript - 如何阻止用户使用 javascript 链接

标签 javascript apache code-injection

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

最佳答案

评论中的人说你永远无法让某人 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)})})();

函数越大,阅读和理解就越困难。如果你有像 firebug 这样的工具,你可以把它拆开,但这确实很痛苦,所以你会劝阻大多数人。

关于javascript - 如何阻止用户使用 javascript 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16113431/

相关文章:

Apache 2.2 禁用未配置的子域

python - 混合经过身份验证和未经身份验证的 URL、Internet Explorer 和 mod_auth_sspi

c# - 如何在屏幕上获取鼠标 WM_MouseMove 消息?

javascript - 允许空白或数字值的正确正则表达式是什么

javascript - 是否可以编辑现有网页的 CSS?

javascript - Node ,如何终止/停止 Node 进程? Ubuntu 16.04 长期支持版

multithreading - 当Apache工作程序启动其自己的工作程序线程或进程时会发生什么?

android - Butterknife vs AndroidAnnotations

PL/SQL 中的 SQL 注入(inject) - 神话还是事实?

javascript - 凹凸贴图对 Three.js 中的纹理没有影响