我有这样的东西(代码简化):
<?php
$var = 'Read "The Book"';
?>
<input type="text" value="<?php echo $var; ?>" />
问题是,在输入中,它看起来像是打印read
,当你查看源代码时,你会发现它有<input type="text" value="Read "The Book"" />
,但它不起作用。
我不能简单地用value='<?php echo $var; ?>'
替换value="<?php echo $var; ?>"
,因为$var
可以有任何值,如果我这样做,它的值是D'Artagnan
,它将尝试打印<input type="text" value='D'Artagnan' />
。
=(
有什么建议吗?
您应该通过将具有特殊含义的字符转义到它们各自的HTML实体中来净化所有输出。您可以使用htmlspecialchars
在html上下文中执行此操作。
<input type="text" value="<?php echo htmlspecialchars($var); ?>" />
因此,有了它,您就可以避免XSS攻击。