在解析和验证输入时,两个数据之间存在张力。
-
检查一切安全。不要让垃圾进来,因为它会导致谁也不知道什么东西出来。
-
允许接受输入(但严格生产输出),因为否则你会造成不必要的不兼容。
什么原则决定应用哪条规则?我的最佳猜测是(1)适用于验证将传递到其他地方的数据的情况。还有其他的考虑吗?
我想说#1更多地应用于输入的内容(它真的是一个人的名字,还是一个DROP TABLE命令?),而#2更多地应用于输入的格式(几乎有效的XML——我们知道您的意思,所以我们接受它)。
我还认为实现#2的各种情况(接受糟糕的HTML或XML;允许javascript在行尾不使用分号已经被证明是错误的。