我有以下数组:
'tagline_p' => "I'm a <a href='#showcase'>multilingual web</a> developer, designer and translator. I'm here to <a href='#contact'>help you</a> reach a worldwide audience.",
我是否应该逃避数组中的HTML标记以避免对我的网站进行攻击? (如何逃避它们?)
或者可以在数组中包含HTML标记吗?
答案 0 :(得分:8)
它成为问题的唯一时间是它包含用户输入。你知道你在阵列中放了什么,并相信它。但是你不知道用户传入了什么,并且不相信。
因此在这种特殊情况下,不需要转义。但是一旦涉及用户输入,您应该转义输入。
HTML本身并不危险,但HTML用户的类型可以传入,例如允许它们执行Javascript的脚本标记。
<强>加成强>
请注意,最佳做法是仅在输出上转义而不是输入。输出是数据可以造成损害的地方,所以你想要一直逃脱它。这样,您就不必确保所有输入都被转义。
这样,在将数据输出到可能适用不同规则的不同格式时,您就没有问题。如果您不需要将内容输出为html,则不必使用stripslashes()
或htmlspecialchars_decode()
之类的内容。
答案 1 :(得分:1)
可以将数据存储在数组中。
您只需要在将标记输出到HTML上下文时转义标记,并且您不相信它,或者您不希望解释HTML。
您必须以适当的方式将数据转发到您发送的位置;对于HTML,如果你不想将它作为HTML读取,你可以使用htmlspecialchars(),同样如果你把它放入一个SQL语句而你不希望它被读作SQL,你可以使用mysql_real_escape_string()等
答案 2 :(得分:1)
您应该在用户输入HTML时转义HTML(因此不安全)并且您将在您的站点中显示该HTML。如果你是谁写的,它不需要任何类型的转义。
如果您确实需要转义html,则应在将其显示在您的网站上之前执行此操作。当你只是拖着它时就没有必要逃避数据(就像你对这个数组做的那样)。您可以使用htmlspecialchars()函数转义HTML。
答案 3 :(得分:0)
(使用htmlspecialchars
或htmlentities
来转义HTML。)
只要您限制来自用户的标记和属性集(如果该数组是动态生成的),那么使用HTML标记就可以了。。例如,不应允许<script>
,也不允许使用onmouseover
等事件处理程序。
答案 4 :(得分:0)
这取决于HTML如何进入数组。如果它被你硬编码,它可能是好的。如果它来自用户,那么所有用户输入都是可疑的 - HTML更难以清理。
真正的问题可能是“为什么要将HTML放入数组?”。如果是静态文本,请将其放在某个模板文件中。
答案 5 :(得分:0)
制作一系列允许的标签并使用strip_tags($input_array[$key],$allowable_tags)
或制作这样的功能
function sanitize_input($allowable_tags='<br><b><strong><p>')
{
$input_array = $input;
foreach ($input as $key=>$value){
if(!empty($value)) {
$input_array[$key] = strip_tags($input_array[$key],$allowable_tags);
}
}
return $input_array;
}