我昨天发了一个问题,我打算回到今天,但是我写了一些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
}
答案 0 :(得分:5)
为什么不使用着名的 HTML Purifier ?
HTML Purifier符合标准 用PHP编写的HTML过滤器库。 HTML Purifier不仅会删除所有内容 恶意代码(俗称为 XSS)经过全面审核,
它安全但宽容的白名单 还将确保您的文件 符合标准,只有一些东西 可以全面实现 了解W3C的规格。
厌倦了使用BBCode 当前的景观缺陷或 不安全的HTML过滤器?有一个 WYSIWYG编辑但从未能够 用它?寻找高品质, 符合标准,开源 该应用程序的组件 你在建造? HTML Purifier适用于 你!
答案 1 :(得分:5)
在防范攻击方面,你所做的事情是完全没有必要和无用的。任何基于JavaScript的“保护”都将在几秒钟内被规避,合法用户将不会乐于无法使用$
标志。始终假设任何传入的数据 都已被篡改。
在服务器端输出数据时需要小心。对任何传入的文本数据使用htmlspecialchars()
。如果您有传入的HTML需要“清理”,请使用Sarfraz建议的HTML净化器。
相关SO阅读:
答案 2 :(得分:2)
您必须在服务器上进行输入验证。攻击者可以发送请求,同时完全绕过浏览器和您的javascript。要安全地过滤输入,您必须在服务器端执行此操作。
这样做的好方法是使用php的filter extension。
如果您只想再次显示输入,请使用htmlspecialchars()。
答案 3 :(得分:0)