从mysql中获取数据。
然后回复echo htmlspecialchars( $content['MainText'] , ENT_NOQUOTES, "UTF-8");
。
试图在没有像htmlspecialchars
这样的<script> alert('Hello');</script>
javascript的情况下回复并看到弹出框。因此,没有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;
我的想法不是将<
替换为<
,而是将<
替换为br
,a
,<h2
。所以如果在mysql中就像<script>
那样就不会执行。
如果我的想法是安全的,想要检查(获得选择)吗?可能还有一些建议。
答案 0 :(得分:1)
我认为一个不同的想法是阻止它以这种方式存储在第一个位置,以便你可以回应它。您所指的是xss攻击,有人可以输入JavaScript然后可以在其他用户浏览器上执行,请查看此链接以获取有关xss click here的更多详细信息。
至于删除它的方法我会做的是对推算数据进行某种形式的验证有很多方法可以做到这一点我建议阅读上面的链接,这将让你知道如何阻止它和意味着你可以做一个简单的回声。像这样进行验证也有助于防止SQL注入攻击,尽管这需要更多的工作。
这不会每次都有用,有些人还建议你使用htmlspecialchars但是当你使用html这会导致问题,你知道,你只需要做出最好的尝试,没有系统可以阻止一切。
不确切地知道你在做什么这是不可能的,但你可能会发现使用某种模板引擎很有用,所以HTML与代码分开,你可以使用函数htmlspecialchars()
然后只是将文本传递给模板。
答案 1 :(得分:0)
使用strip_tags($content['MainText'], '<a><h2><div><span><br><img>');
或者您可以使用htmlspecialchars然后使用此preg_replace('#<(/?(?:a|h2|div|span|br|img))>#', '<\1>', $html);
,例如:
$content_main_text_modified = htmlspecialchars($content['MainText']);
$content_main_text_modified = reg_replace('#<(/?(?:a|h2|div|span|br|img))>#', '<$1>', $content_main_text_modified);
答案 2 :(得分:0)
查看http://htmlpurifier.org/和HTML.Allowed指令;您可以在其中设置允许的标记。