![]() |
1
9
用户不是输出中不可靠字符串的唯一来源。例如,考虑一下从数据库中出现的“罗密欧与朱丽叶”这一明显安全的字符串。你说那里没有跨站点脚本?真的。但是,将它粘贴到网页中,原始的和号可能会导致验证、解析等一些有趣的问题。 输出转义不仅仅是为了防止恶意或意外借用输入,它还确保输出被彻底消毒,并在周围的输出格式中被视为没有特殊意义,无论是HTML、XML、JSON或其他什么格式。 |
![]() |
2
4
通常,我会从用户输入、数据源甚至是计算中逃离任何东西。您希望输出是可预测的,转义确保它是可预测的。如果转换为字符串时的值包含破坏所需标记的字符,则情况会变得混乱。
如果你使用的是视图,
|
![]() |
3
2
另一件事是,很多时候,某一天硬编码的东西会变成用户,或者至少数据库会在另一天生成。管理代码中变量的输出是更好的做法。 |
![]() |
4
1
您可以这样看:您应该始终对变量进行HTML编码,除非您知道它们已经被编码了。 假设有一个变量包含:
如果您知道它包含HTML标记,并且您可以接受,那么您可以说这个变量已经被正确的HTML编码了。甚至可以将它赋给不同的变量类型,以使编译器知道区别(Joel的想法),并让输出函数处理这些类型而不转义它们。 当然,这意味着
是不正确的值;您需要确保它是:
|
![]() |
5
1
我认为这里的最佳实践总是转义输出,除非您打算输出一个原始的HTML片段。即使“安全”数据也可以包含需要转义的字符。例如,考虑电子邮件地址“bob”<bob@bob.com>。如果您不逃避,浏览器会认为<bob@bob.com>是一个标签。 |
![]() |
6
1
显然,您希望避免用户数据的结果,以防止XSS攻击。因为你经常改变你要重新发布的内容和你不需要的内容,你可能记不起所有需要改变的地方…因此,即使您现在纠正了所有的细微差别,并且您的站点现在已经从XSS脚本中得到了保护,您也可能在某个时刻将用户输入添加到您没有转义的某个变量(或者更可能的是,将某个变量添加到某个变量,将某个变量添加到您没有转义的某个变量),这将使您面临XSS攻击。 默认情况下逃逸可以防止这种攻击。 另一个原因是更具概念性的:对于MVC,所有标记——根据定义,“视图”——都应该在视图模板中。因此,如果控制器正在确定视图,并且视图包含所有标记,为什么不转义变量呢? |
![]() |
7
0
好吧,如果你有硬编码的值(比如从数据库或XML文件中读取的语言翻译),你就不必逃避它们。 但是,如果有一个值是由用户创建/修改的,甚至可以说是在管理面板中,您必须避开它,因为您不知道什么类型的数据用户,或者如果我更激进,甚至是管理员,将会发送。 |
|
Adam Noack · 如何将转义字符串转换为相应单个字符的列表? 7 年前 |
![]() |
vishnumanohar · 如何转义curl命令头中的特殊字符 7 年前 |
![]() |
Johnny · 如何使用PHP通过JSON发送HTML元素? 7 年前 |
![]() |
sapbucket · 如何处理具有大量转义的字符串? 7 年前 |
![]() |
e___e · python字符串。格式和无效转义 7 年前 |
![]() |
Patric · 计算传递给PowerShell中函数的字符串内的变量 7 年前 |
![]() |
Jack · 如何通过C将字符@“\”转换为转义字符串# 7 年前 |