Php 在数组中有HTML标记可以吗(有被黑客攻击的风险吗)?
我有以下数组:Php 在数组中有HTML标记可以吗(有被黑客攻击的风险吗)?,php,arrays,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.", 'tagline\u p'=>“我是一名开发人员、设计师和翻译人员。我来这里是为了
'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.",
'tagline\u p'=>“我是一名开发人员、设计师和翻译人员。我来这里是为了接触全世界的观众。”,
我是否应该避开数组中的HTML标记以避免对我的站点进行黑客攻击?(如何逃离他们?)
或者可以在数组中包含HTML标记吗?(使用htmlspecialchars
或转义HTML。)
如果数组是动态生成的,那么只要限制来自用户的标记和属性集,就可以使用HTML标记。例如,不允许使用
,也不允许使用类似于onmouseover
的事件处理程序。只有当它包含用户输入时才会出现问题。你知道你在数组中放了什么,并且相信它。但是你不知道用户在传递什么,也不要相信这一点
所以在这种特殊情况下,不需要逃跑。但是一旦涉及到用户输入,您就应该退出输入
危险的不是HTML本身,而是用户可以传递的HTML类型,比如允许他们执行Javascript的脚本标记
添加
请注意,最好的做法是仅在输出时转义,而不是在输入时转义。输出是数据可能造成损害的地方,因此您希望始终如一地避免这种情况。这样,您就不必确保所有输入都已转义
这样,在将数据输出到可能应用不同规则的不同格式时就不会出现问题。如果不需要将内容输出为html,则不必使用
stripslashes()
或htmlspecialchars\u decode()
。可以将数据存储在数组中
您只需要在将标记输出到HTML上下文中时转义标记,并且您不信任它,或者您不希望对HTML进行解释
您必须以适当的方式将数据转义到您要发送的位置;对于HTML,如果您不想将其读取为HTML,则可以使用htmlspecialchars(),同样,如果您将其放入SQL语句中,并且不想将其读取为SQL,则可以使用mysql\u real\u escape\u string()等。这取决于HTML如何进入数组。如果是你硬编码的,可能没问题。如果它来自一个用户,那么,所有的用户输入都是可疑的——HTML更难清理
真正的问题可能是“为什么要将HTML放入数组?”。如果是静态文本,请将其放在模板文件中的某个位置。当用户输入HTML时(因此不安全),您应该转义HTML,然后在站点中显示该HTML。如果是你写的,不需要任何逃避
如果您确实需要转义html,您应该在将其显示在站点上之前进行转义。当您只是拖着数据四处走动时,不需要转义数据(就像您使用该数组时所做的那样)。您可以使用该函数转义HTML。创建一个允许的标记数组,并使用
带标记($input\u array[$key],$ALLOWED\u 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;
}
函数清理输入($allowed_tags='
)
{
$input_数组=$input;
foreach($key=>$value的输入){
如果(!空($value)){
$input_数组[$key]=条带标签($input_数组[$key],$ALLOWED_标签);
}
}
返回$input_数组;
}
或插入SQL语句。@dnagirl标记行\u p重复3次(3种不同的语言)。不包含锚定标记的唯一方法是将数组拆分为2:tagline_p1 tagline_p2 tagline_p3(我不知道是否有更好的选项)。@janoChen:如果您的站点将是多语言的,您可能想看看i18n包。这是PHP中gettext的一个很好的描述