如何防止用户使用javascript链接

时间:2013-04-19 21:00:57

标签: javascript apache code-injection

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

1 个答案:

答案 0 :(得分:1)

评论中的人说你永远无法100%地从你的代码中找到某人,但是你可以做一些事情来抵御那些不太严肃的人:

  1. 将您的函数封装在一个对象中,使其不在全局命名空间中,
  2. 模糊您的代码
  3. 否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这样的工具你可以把它拆开,但这真的很痛苦,所以你最劝阻。