我想知道,下面这个例子中的最佳做法是什么。
<?php
if(isset($_POST['query'])){
$out = $_POST['query'];
}
?>
<div><?php echo $out; ?></div>
<input type="text" value="<?php echo $out; ?>" />
使用上述代码会对网站构成威胁。或者我需要在使用之前准备输出,如上所述。准备我的意思是编码或转义特殊字符。
我知道你需要逃避它并验证数据库使用的输入,如何输出它?
答案 0 :(得分:3)
是的,因为你要把它放到HTML中,你应该使用htmlspecialchars
适当地使用编码HTML的特殊字符:
if (isset($_POST['query'])) {
$out = htmlspecialchars($_POST['query']);
}
除此之外,$out
仅在$_POST['query']
存在时定义;如果$_POST['query']
不存在,您应该考虑使用默认值。因为否则,当启用register globals时(仅此一点是个坏主意),您可以通过带有?out=…
的URL查询字符串设置该变量。
答案 1 :(得分:2)
是的,你应该使用php函数htmlspecialchars http://php.net/manual/en/function.htmlspecialchars.php
另外,请看这个(接受的答案)
Do htmlspecialchars and mysql_real_escape_string keep my PHP code safe from injection?
答案 2 :(得分:1)
不知道最佳实践,这取决于我喜欢三元组的编码器
echo (isset($_POST['query']))? htmlspecialchars($_POST['query']):"";