从mysql获取数据。
然后用echo htmlspecialchars( $content['MainText'] , ENT_NOQUOTES, "UTF-8");回声。
尝试在没有htmlspecialcharsjavascript的情况下进行回声,如<script> alert('Hello');</script>并看到弹出框。所以没有htmlspecialchars的回声是不好的。
但用htmlspecialchars不能正确显示超链接和图像,也不能接受<h2><span>等。
目前试图替换一些字符,如

$content_main_text_modified =
str_replace(
array( '&lt;br/&gt;', '&lt;br&gt;', '&lt;/a&gt;', "&gt;", '&lt;a', '&lt;div', '&lt;img', '&lt;/div', '&lt;h2', '&lt;/h2', 'amp;amp;', '&lt;span', '&lt;/span' ),
array( '<br/>', '<br>', '</a>', ">", '<a', '<div', '<img', '</div', '<h2', '</h2', '', '<span', '</span' ),
( htmlspecialchars( $content['MainText'] , ENT_NOQUOTES, "UTF-8") )
);
echo $content_main_text_modified;

我的想法不是用&lt;替换sole<,而是同时替换&lt;bra。所以如果在mysql中是<h2它就不会执行。
想看看我的主意是否安全吗?可能还有一些建议。

最佳答案

我认为另一个不同的想法是,首先要停止以这种方式存储它,这样您就可以直接响应它。您所指的是xss攻击,其中有人可以输入JavaScript,然后在另一个用户浏览器上执行。请查看此链接以获取有关xssclick here的详细信息。
至于删除它的方法,我会做的是对输入数据进行某种形式的验证,有很多方法可以做到这一点,我建议阅读上面的链接,这将给你一个想法,如何停止它,意味着你可以做一个简单的回声。这样做也有助于防止sql注入攻击,尽管这需要做更多的工作。
这不会每次都起作用,有些人还建议您使用htmlspecialchars,但是当您使用html时,正如您所知,这会导致问题,您只需尽最大努力,没有任何系统可以阻止一切。
不知道你在做什么是不可能说的,但是你可能会发现使用某种模板引擎是有用的,这样HTML就可以从代码中分离出来,你可以使用函数htmlspecialchars(),因为你可以将文本传递给模板。

10-08 04:16