PHP安全性-注入后$\u

PHP安全性-注入后$\u,php,security,Php,Security,在使用我的网站之前,我对安全性做了一些思考: 这个问题是关于理解PHP中的处理,而不是为保护表单而努力 考虑这个赤裸裸的脚本,它对xss和 sql注入(如果提供) <? if ($_POST['submit']=="1"){ $input = $_POST['input']; echo "echo the input: ".$input."<br/>"; } ?> <form action="<? $PHP_SELF;?>" metho

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

这个问题是关于理解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>
我天真地认为“回音”将结束回音,然后继续代码。 事实上,我很高兴这不起作用,但我想知道为什么。 在SQL中,这种方法实际上可以“或1”工作

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


谢谢

如果您通过
eval()
进行操作,它会起作用,但除此之外,它只是一个字符串,与其他任何字符串一样。

POST数组元素的内容是字符串。因此,无论何时提交“;unset('index.php');“(顺便说一句,对变量不进行unset处理吗?)实际上是以字符串的形式发送,而不是以PHP可执行代码的形式发送

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


另一件事,不要使用addslashes()来保护查询,而是使用库的专用函数,例如mysql的mysql\u real\u escape\u string()。或者更好地使用查询绑定来处理准备好的语句和参数化查询。

你的意思是如果我在处理过程中写入eval()或者如果有人注入eval”;eval(unset('index.php')。我猜是第一个,这让我很高兴,因为我以前从未使用过eval。@电子邮件否,如果您发送
eval(unset($var))
您仍然发送一个字符串,一个文本字符串。Eval()必须对提供的字符串求值,以使其成为php可执行代码;如果代码中没有eval(),您就可以安全地解决这个问题。是的,但是针对xss,我不会使用htmlspecialchars吗?或者,如果我使用POST而不是GET,这是否已过时?警报(“hi”);不,htmlspecialchars()或htmlentities()确实是针对XSS使用的(实际上,对于所有东西,都是针对$\u POST和$\u GET和$\u COOKIE)。我说的是保护DB查询的安全,我以为您在谈到addslashes()时提到了这一点,我将其标记为答案,因为它解释了更多的原因。thx 2 kolink也是。我本来打算这么做的:P Damien如果我们只使用echo,它还危险吗?或者,如果我们使用eval,那么它只会很危险。除了你自己:小心使用任何字符串函数,例如
addslashes()
mysql\u real\u escape\u string()
htmlspecialchars()
它们只在特定的地方和特定的情况下为你提供你想要的保护。看见
";unset('index.php');