是否可以在数组中包含HTML标记(是否存在黑客攻击的风险)?

时间:2010-04-30 13:35:25

标签: php arrays

我有以下数组:

'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标记吗?

6 个答案:

答案 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)

(使用htmlspecialcharshtmlentities来转义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;

}