page1.php
<form method="post" action="page2.php">
<textarea name="tryit" cols="!20" rows="10"></textarea>
</form>
第 2.php 页
<?php
echo filter_input(INPUT_POST, 'tryit', FILTER_SANITIZE_SPECIAL_CHARS);
?>
我只是不希望任何用户执行任何系统代码或调用任何系统函数。
谢谢
该代码在 XSS 方面是安全的,因为filter_input()
使用该FILTER_SANITIZE_SPECIAL_CHARS
标志将对 HTML 特殊字符进行编码,从而防止 XSS 漏洞。
从手册:
FILTER_SANITIZE_SPECIAL_CHARS
HTML-escape '"<>& 和 ASCII 值小于 32 的字符,可选择剥离或编码其他特殊字符。
它与以下内容相同:
echo htmlspecialchars($_POST['tryit']);
如果将代码移动到另一个上下文中,例如 SQL 查询,那么它就不再安全了。特殊字符编码专门用于防止 XSS。
此代码片段不会执行操作系统的任何功能或任何 shell 命令。
filter_input
也不会执行任何系统功能。
page2
只会显示POST
as 文本收到的任何内容。
存储的值$_POST['tryit']
不会受到影响。当您再次访问该变量(或将其 HTML 转义版本存储在某处)时,您需要单独对其进行清理。
filter_input
不常用。您可以改用特定的转义函数。
使用htmlspecialchars,这将替换所有特殊的 html 字符:& ' " < >
到& ' " < >
之后,它们将显示为普通字符。