PHP安全性-$_POST-注入



在使用我的网站之前,我对安全性做了一些思考:

这个问题是关于理解PHP中的处理,而不是为确保表单的安全而努力

考虑一下这个对xss和sql注入(如果提供)。

<?
if ($_POST['submit']=="1"){
    $input = $_POST['input'];
    echo "echo the input: ".$input."<br/>";
}
?>
<form action="<? $PHP_SELF;?>" method="POST">
<input type="text" name="input" value="<? echo $_POST['input'];?>"/>
<input type="hidden" name="submit" value="1"/>
<input type="submit" value="submit"/>
</form>

我想知道为什么这样的注入不起作用(在字段输入中):

";unset('index.php');

我天真地认为"会结束回声,然后继续代码。事实上,我很高兴这不起作用,但我想知道为什么。在SQL中,这类操作实际上是"OR 1"。

我知道用addslash或htmlspecialchars来确保这一点,但这不是问题所在。我想了解php是如何处理这个问题的。

感谢

$_POST数组元素的内容是字符串。所以,每当您提交";unset('index.php');"(顺便说一句,unset对变量不起作用吗?)时,您实际上会将其作为字符串发送,而不是作为php可执行代码发送。

除非使用eval(),否则不必担心php代码会被评估。

另一件事是,不要使用addslashes()来保护查询,而是使用库的专用函数,例如mysql_real_eescape_string()for mysql。或者更好地将查询绑定与准备好的语句和参数化的查询结合使用。

如果你把它放在eval()中,它会起作用,但除此之外,它只是一个像其他字符串一样的字符串。

最新更新