我有一个新闻提交表格。我希望通过剥离所有 html 标签来防止 XSS 等。然后我将使用这种格式转换所有其他标签
[tagname attributes][/closetagname]
对此
<tagname attributes></closetagname>
. 问题是如何将标签转换为这种格式。
好吧,如果您使用的是 PHP,我认为内置的strip_tags()和 PHP 扩展bbcode的组合应该可以满足您的需求。
仅仅通过“剥离所有 html 标签”和“转换所有其他标签”,你将不会受到 XSS 的影响。对抗 XSS 只能通过将一些已知标签列入白名单(并将一些已知属性列入白名单)来工作,而黑名单总是会失败。这里有一个更完整的解释。
在 PHP 中清理 HTML 代码的一个很好的解决方案是使用HTML Purifier。
<?php
$string = '<tagname attributes></closetagname>';
$clean = str_replace(array('<','>'),array('[',']'), $string);
echo $clean; //[tagname attributes][/closetagname]
?>
当然,这将替换 < 和 > 的所有实例。
<?php
$text = '[tagname attributes][/closetagname]';
$text = preg_replace('/\[([^\[]+?)\]/', '<$1>', $text);
echo $text;
?>
假设您没有在标签内获得 [ 和 ] 。