我正在开发一个Web应用程序,允许用户在目录中键入项目的简短描述.我在我的textareas中允许Markdown,因此用户可以进行一些HTML格式化.
我的文本清理功能会在将任何输入的文本插入数据库之前将其删除:
public function sanitizeText($string, $allowedTags = "") { $string = strip_tags($string, $allowedTags); if(get_magic_quotes_gpc()) { return mysql_real_escape_string(stripslashes($string)); } else { return mysql_real_escape_string($string); } }
基本上,我存储在数据库中的所有内容都是Markdown - 没有其他HTML,甚至"基本HTML"(如此处的SO)是允许的.
允许降价会出现任何安全威胁吗?降价可以是XSSed,即使它没有标签吗?
我认为从输入中删除任何HTML标记会给你一些非常安全的东西 - 除非有人找到一种方法将一些真正混乱的数据注入Markdown,让它产生一些更加混乱的输出^^
不过,我想到的有两件事:
第一个: strip_tags
不是奇迹功能:它有一些缺陷......
例如,它会在'<'之后删除所有内容,在这种情况下:
$str = "10 appels is我得到的输出是:
string '10 appels is ' (length=13)哪个对您的用户不太好:-(
第二个:一天或另一天,你可能想要允许一些HTML标签/属性; 或者,即使在今天,您可能希望确保Markdown不会生成一些HTML标签/属性.您可能对像HTMLPurifier这样的东西感兴趣:它允许您指定应保留哪些标记和属性,并过滤字符串,以便只保留那些.
它还生成有效的HTML代码 - 这总是很好;-)
2> Jordan Reite..:这是一个可爱的例子,说明为什么需要在之后而不是之前清理HTML:
降价代码:
> >呈现为:
你现在担心吗?