验证GET字符串但仍使用特殊字符?

时间:2010-12-09 14:35:41

标签: php mysql sql

我的一个GET变量允许所有可以通过urlencoding来弄乱URL的字符。麻烦的是,这意味着标签可以传递给脚本并显示在html中,不是很好!特别是因为它习惯于在mysql db上运行SELECT。

所以我现在正在使用的是一个散列在一起的preg_replace,它可以删除所有标签(下图)

$getstring = preg_replace("/(<\/?)(\w+)([^>]*>)/e","", $getstring);

这是否足够或是否有一个我错过的空洞?

2 个答案:

答案 0 :(得分:2)

htmlspecialchars()将允许显示特殊字符。 HTML标记将显示为普通文本(即转义),因此如果有人有太多时间,您可以看到他们尝试过的内容。如果您想在此之后过滤某些标签,请使用之前的尝试来指导您。

如果您想允许某些格式设置,请将strip_tags与白名单一起使用以允许一些基本标记。或者,标记语言(例如Markdown(此处使用)或ReMarkable)可能会有用,具体取决于用户的技术级别。

听起来好像你也容易受到SQL注入攻击。你应该尽可能使用参数化查询,使用mysqli(问题有mysql-query标签)或PDO。 PDO::prepare()应该让你加快速度。

答案 1 :(得分:1)