如何在 html 上显示 htmlspecialchars?
How to display htmlspecialchars on the html?
我读过这里:
htmlspecialchars() 非常有效地防止 xss 攻击。
我从所见即所得的编辑器接收格式化文本,例如:
<p>
<em>
<strong><span style="font-size:36pt;">test</span></strong>
</em>
</p>
在我的 html 上对此进行编码:
<!DOCTYPE html>
<html lang=en>
<head>
<title></title>
</head>
<body>
<?php echo htmlspecialchars('<p><em><strong><span style="font-size:36pt;">test</span></strong></em></p>', ENT_QUOTES); ?>
</body>
</html>
将在浏览器上输出:
<p><em><strong><span style="font-size:36pt;">test</span></strong></em></p>
如何正确显示格式化文本,同时防止 XSS 注入?
如果要保留缩进:
将输出包装在 <pre>
标记中。此标签保留空白字符
如果您希望输入呈现为 HTML:
不要使用 htmlspecialchars
。是的,这会再次向 XSS 打开您的应用程序。
为防止xss注入并正确显示,一旦strip_tag()
isn't fully safe, you should take a look in HTML PURIFIER
希望对您有所帮助!
htmlspecialchars
编码在 XML 中具有(或可能)特殊含义的所有字符,特别是 <
、>
、&
、"
,和 '
(如果设置了 ENT_QUOTES)。
因此,使用此设置,浏览器将不会呈现任何恶意代码尝试。
例如
<script>alert('bam');</script>
会是
<script>alert('bam');</script>
//or with quotes constant
<script>alert('bam');</script>
哪个JS不会处理。因此,这可能是阻止 XSS 注入的有效方法。但是,您希望用户提交一些 HTML,因此您需要制作一种已批准元素的白名单。您可以通过将 <>
替换为用户输入中不会出现的自定义文本来实现。在下面的示例中,我选择了 custom_random_hack
。然后 运行 通过 htmlspecialchars
的所有内容都将对所有特殊字符进行编码。然后将交换的元素转换回它们的 HTML 元素。
$string = '<p>
<em>
<strong><span style="font-size:36pt;">test</span></strong>
</em>
</p>';
$allowedtags = array('p', 'em', 'strong');
echo '~<(/?(?:' . implode('|', $allowedtags) . '))>~';
$string = preg_replace('~<(/?(?:' . implode('|', $allowedtags) . '))>~', '#custom_random_hackcustom_random_hack#', $string);
echo str_replace(array('#custom_random_hack', 'custom_random_hack#'), array('<', '>'), htmlspecialchars($string, ENT_QUOTES));
我读过这里:
htmlspecialchars() 非常有效地防止 xss 攻击。
我从所见即所得的编辑器接收格式化文本,例如:
<p>
<em>
<strong><span style="font-size:36pt;">test</span></strong>
</em>
</p>
在我的 html 上对此进行编码:
<!DOCTYPE html>
<html lang=en>
<head>
<title></title>
</head>
<body>
<?php echo htmlspecialchars('<p><em><strong><span style="font-size:36pt;">test</span></strong></em></p>', ENT_QUOTES); ?>
</body>
</html>
将在浏览器上输出:
<p><em><strong><span style="font-size:36pt;">test</span></strong></em></p>
如何正确显示格式化文本,同时防止 XSS 注入?
如果要保留缩进:
将输出包装在 <pre>
标记中。此标签保留空白字符
如果您希望输入呈现为 HTML:
不要使用 htmlspecialchars
。是的,这会再次向 XSS 打开您的应用程序。
为防止xss注入并正确显示,一旦strip_tag()
isn't fully safe, you should take a look in HTML PURIFIER
希望对您有所帮助!
htmlspecialchars
编码在 XML 中具有(或可能)特殊含义的所有字符,特别是 <
、>
、&
、"
,和 '
(如果设置了 ENT_QUOTES)。
因此,使用此设置,浏览器将不会呈现任何恶意代码尝试。
例如
<script>alert('bam');</script>
会是
<script>alert('bam');</script>
//or with quotes constant
<script>alert('bam');</script>
哪个JS不会处理。因此,这可能是阻止 XSS 注入的有效方法。但是,您希望用户提交一些 HTML,因此您需要制作一种已批准元素的白名单。您可以通过将 <>
替换为用户输入中不会出现的自定义文本来实现。在下面的示例中,我选择了 custom_random_hack
。然后 运行 通过 htmlspecialchars
的所有内容都将对所有特殊字符进行编码。然后将交换的元素转换回它们的 HTML 元素。
$string = '<p>
<em>
<strong><span style="font-size:36pt;">test</span></strong>
</em>
</p>';
$allowedtags = array('p', 'em', 'strong');
echo '~<(/?(?:' . implode('|', $allowedtags) . '))>~';
$string = preg_replace('~<(/?(?:' . implode('|', $allowedtags) . '))>~', '#custom_random_hackcustom_random_hack#', $string);
echo str_replace(array('#custom_random_hack', 'custom_random_hack#'), array('<', '>'), htmlspecialchars($string, ENT_QUOTES));