我有一个输入框,用户在其中输入了
之类的字符串 "/> <img src=xxx onError=alert('test is here')
但是在我将 strip_tags 功能保存到数据库之前,我已经使用过。它获得了图像标签,但字符串“ />被原样保存在数据库中。
我该如何克服呢?
答案 0 :(得分:0)
老实说,不幸的是没有人去解决。
strip_tags 函数在格式良好的HTML上效果很好,您的示例无效。
您的选择之一是编写一个自定义代码,根据其性质“清除”输入。例如,如果输入应收集某人的年龄,则除去所有非数字的内容。您可以对姓名,电话等进行相同的操作。
当然,作为开发人员,我们无法预见用户可以(有意或无意)输入的所有可能的废话,有时我们最终会在数据库中获得此类数据。这就是为什么在将数据打印到HTML中之前转义数据始终是一个好主意的原因。所有的框架和模板引擎已经为您完成了。如果您不使用框架,则可以使用 htmlentities 函数-http://php.net/manual/en/function.htmlentities.php。
html实体将保存所有HTML保留字符,并且不会破坏您的页面。例如:
htmlentities("/> <img src=xxx onError=alert('test is here')");
将导致:
/> <img src=xxx onError=alert('test is here')
并通过浏览器呈现后,如下所示: