【问题标题】:Could my forms be hacked我的表格会被黑客入侵吗
【发布时间】:2011-02-09 15:35:15
【问题描述】:

我昨天发布了一个问题,我打算回到今天,但是我编写了一些 JavaScript 作为预防 XSS 的第一道防线。但是,当在我的实时服务器上进行测试时,我会捕获一些无效输入,因为 javascript 会捕获 php 部分。我的表单使用 post 并且 php 不在我的表单项中(我没有输入它)。这可能是拿起表单动作还是什么?我很困惑,有什么想法

这是我的代码,它是在提交按钮上触发的。

    function validateForBadNess(){

var theShit = new Array("*","^", "$", "(",")","{", "}","[", "]","\\", "|", "'","/","?",",","=",">","gt","lt", "<","script","`","´","php");
var tagName = new Array();

tagName[0] = "input";
tagName[1] = "select";
tagName[2] = "textbox";
tagName[3] = "textarea";

for (ms=0;ms<tagName.length;ms++){

 // loop through  the elements of the form
 var formItems = document.getElementsByTagName(tagName[ms]);

  for (var xs=0;xs<formItems.length;xs++){

   var thisString = formItems[xs].value;

   // loop through bad array
   for (zs in theShit){

    //alert(thisString + " " + thisString.indexOf(theShit[zs]))
    if(thisString.indexOf(theShit[zs]) >= 0){

    alert("Sorry but the following character: " + theShit[zs] + " is not permitted. Please omit it from your input.\nIf this is part of your password please contact us to heave your password reset.")
    return false;

    }

     }



  // loop for formitems 
  }

 // tagName toop
 }
// original condition
}

【问题讨论】:

  • 其他人已经为您指出了正确的方向,但我只想提一下,如果您打算这样做,那么您这样做的方式非常混乱且不必要。你的大部分代码都可以用一个相对简单的正则表达式代替,不需要复杂的数组设置等。
  • "抱歉,不允许使用以下字符:" + theShit[zs] + "。请尝试使用另一个字符进行破解,如果您想收到一些建议,请大声说 'KEVIN MITNICK'。" xD

标签: javascript php


【解决方案1】:

就保护免受攻击而言,您所做的完全没有必要且毫无用处。任何基于 JavaScript 的“保护”都将在几秒钟内被绕过,合法用户不会因为无法使用 $ 符号而感到高兴。始终假设任何传入的数据可能已被篡改。

在服务器端输出数据时需要小心。对任何传入的文本数据使用htmlspecialchars()。如果您需要“清理”传入的 HTML,请按照 Sarfraz 的建议使用 HTML 净化器。

相关的 SO 阅读:

【讨论】:

    【解决方案2】:

    你为什么不改用著名的HTML Purifier

    HTML Purifier 是符合标准的 用 PHP 编写的 HTML 过滤器库。 HTML Purifier 不仅会删除所有 恶意代码(俗称 XSS)经过彻底审核,
    安全但允许的白名单,它 还将确保您的文件是 符合标准,仅此而已 可以通过全面的 了解 W3C 的规范。
    厌倦了使用 BBCode,因为 不足的现状或
    不安全的 HTML 过滤器?有一个
    所见即所得的编辑器,但从未能够 用它?寻找高品质, 符合标准,开源 该应用程序的组件 你在建? HTML 净化器适用于 你!

    【讨论】:

      【解决方案3】:

      您必须在服务器上进行输入验证。攻击者可以只发送请求,同时完全绕过浏览器和您的 javascript。要安全地过滤输入,您必须在服务器端进行。

      一个好的方法是使用 php 的filter extension

      如果您只想再次显示输入,请使用htmlspecialchars()

      【讨论】:

        【解决方案4】:

        【讨论】:

        • 您好,我确实在我的输入中使用了 HTML 实体 htmlentities($str)。我的网站仍然被黑客入侵,所以我认为一些 JS 可能会有所帮助
        猜你喜欢
        • 1970-01-01
        • 2017-05-17
        • 1970-01-01
        • 2022-08-10
        • 1970-01-01
        • 1970-01-01
        • 2018-07-17
        • 1970-01-01
        • 2015-12-06
        相关资源
        最近更新 更多