从mysql获取数据。
然后用echo htmlspecialchars( $content['MainText'] , ENT_NOQUOTES, "UTF-8");
回声。
尝试在没有htmlspecialchars
javascript的情况下进行回声,如<script> alert('Hello');</script>
并看到弹出框。所以没有htmlspecialchars
的回声是不好的。
但用htmlspecialchars
不能正确显示超链接和图像,也不能接受<h2>
,<span>
等。
目前试图替换一些字符,如
$content_main_text_modified =
str_replace(
array( '<br/>', '<br>', '</a>', ">", '<a', '<div', '<img', '</div', '<h2', '</h2', 'amp;amp;', '<span', '</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;
我的想法不是用
<
替换sole<
,而是同时替换<
,br
,a
。所以如果在mysql中是<h2
它就不会执行。想看看我的主意是否安全吗?可能还有一些建议。
最佳答案
我认为另一个不同的想法是,首先要停止以这种方式存储它,这样您就可以直接响应它。您所指的是xss攻击,其中有人可以输入JavaScript,然后在另一个用户浏览器上执行。请查看此链接以获取有关xssclick here的详细信息。
至于删除它的方法,我会做的是对输入数据进行某种形式的验证,有很多方法可以做到这一点,我建议阅读上面的链接,这将给你一个想法,如何停止它,意味着你可以做一个简单的回声。这样做也有助于防止sql注入攻击,尽管这需要做更多的工作。
这不会每次都起作用,有些人还建议您使用htmlspecialchars,但是当您使用html时,正如您所知,这会导致问题,您只需尽最大努力,没有任何系统可以阻止一切。
不知道你在做什么是不可能说的,但是你可能会发现使用某种模板引擎是有用的,这样HTML就可以从代码中分离出来,你可以使用函数htmlspecialchars()
,因为你可以将文本传递给模板。