防止XSS真的意味着我必须运行htmlspecialchars()每次输出一些用户输入吗?例如,每次我显示用户名?看起来真的很乏味。
有更简单的方法吗?
答案 0 :(得分:3)
如果您担心成为攻击的目标,那么您应始终确保从您的网站提交表单,而不是从外部来源提交表单。您可以使用会话:如果会话中的值,表单没问题,否则表单是使用bot提交的。
如果您担心托管恶意脚本,那么是的,您将不得不逃避所有用户输入的内容以供公众和管理员使用。
这应该会更容易:
function h($string) {
return htmlspecialchars($string);
}
您可能需要考虑一种可以为您转义变量的模板语言:
答案 1 :(得分:0)
唯一更简单的方法是使用为您执行此操作的模板。自己做一个,或者看一个像XSLT或我的个人最喜欢的PHPTAL
答案 2 :(得分:0)
它还取决于您期望的内容类型。例如,如果您只是期待信件,那么您可以
$input = preg_replace("/[^a-zA-Z]*/", "", $input);
或者如果你只是期待数字
$input = preg_replace("/[^0-9]*/", "", $input);
或者如果它是混合的并且预期会有其他字符,那么你将不得不使用
$input = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');