最近,人们对XSS及其预防方法产生了兴趣。 大多数XSS预防技术都专注于清理无效字符的输入并使用它们。这提出了一个问题:
当显然目的确实是XSS攻击时,为什么我们试图去除无效字符然后继续使用输入而不是直接拒绝输入并将用法发送到错误页面? / p>
我确信每个人都会想到这种方法,但不知何故,重点是输入验证,过滤和重用而不是拒绝。为什么?我在这里缺少什么?
答案 0 :(得分:1)
因为大多数情况下输入错误时您已经显示错误页面
例如
page.php?id=a33
"select * from table where id = ".((Int)$_GET['id']);
“num rows”值将为0,因为您正在搜索:
"select * from table where id = 0";
在某些情况下加上任何字符串,即使已损坏也可能对程序要做的事情有用,例如搜索字符串...
再一次,不做任何事可能会让用户感到沮丧。如果消毒则更好,并在某些数据丢失时显示警告答案 1 :(得分:1)
我使用的规则是,我使用输入验证来确保数据根据域有效。如果我期待一个数字并得到一串字母,我拒绝它。但是,如果我有一个可以包含任何内容的文本字段(比如堆栈溢出的注释),则输入验证和拒绝几乎是不可能的。所以现在我需要清理/输出编码。