【发布时间】:2012-01-09 06:26:03
【问题描述】:
在我的网站上线之前,我对安全性做了一些思考:
这个问题是关于理解 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'。
我知道用addslashes 或htmlspecialchars 来保护它,但这不是问题所在。我想深入了解 php 如何处理这个问题。
谢谢
【问题讨论】:
-
除了你自己:小心使用任何 string_munging 函数,例如
addslashes()、mysql_real_escape_string()和htmlspecialchars(),它们只会在特定位置和特定情况下为您提供所需的保护。见stackoverflow.com/questions/110575/…