黑客可以在PHP提交中突破GET或POST方法的最早位置是什么?
例如,
如果我的处理表格的第一行是:
$id= $_GET['id'];
$post_id= $_POST['post_id'];
他们是否已经插入了一些恶意代码,当变量设置为等于未经过滤的GET和POST时会执行?
由于
答案 0 :(得分:2)
只要你不像eval()
那样做一些愚蠢的事情,或者直接将它们放入mysql查询中,那就没事了。
他们大多只是字符串,所以没有直接的危险(如果你的意思是像Windows上的病毒那样)。
这里有一些可能的"恶意"你可以得到的东西:
.php
文件,然后执行该文件) </html>
在中间你的文章) 答案 1 :(得分:2)
不,只要您不使用某种解释语言中的数据来区分代码和数据,处理PHP中的外部输入值就不会带来任何风险。
因为在这种情况下,您可能容易受到injection的攻击。通过解释语言我的意思是任何语言,如HTML(Cross-Site Scripting),SQL(SQL Injection),PHP(Code Injection),shell命令(Command Injection),{{3} }
因此,如果您以任何其他方式使用外部数据,请务必正确处理。
答案 2 :(得分:1)
eval($_GET['foo']);
之后可能是直接$a = $_GET['foo']; eval($a);
或间接的。{/ li>
"="
本身不会触发指定内容的执行或解释。你可能认为这是安全的。"="
为“等于”。不要那样做。
通过使用赋值运算符,左操作数被设置为右侧表达式的值(不是“等于”,而是“设置为”)。$a = $_GET['a']; $a();
这实际上是我能想到的高管最早的地方好的,我应该不再是一个挑剔了。
我的建议是:
<强>工作流强>
不信任传入的数据。验证它。
使用$_dirty['foo'] = $_GET['foo']
然后$foo = validate_foo($_dirty['foo']);
使用PHP的filter_input(),filter_var()或您自己的验证函数。
您还可以依赖PHP filter_input()
函数,而不是编写自己的validate_foo()
逻辑。阅读http://www.php.net/manual/en/function.filter-input.php
$search = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
示例强>
该示例验证传入的$ _GET ['id']。 如果值是整数且在某个范围内,则该值应仅视为有效。
$range = array('options'=>array('default'=>1, 'min_range'=>0, 'max_range'=>10));
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, $range);
数据库:使用PDO&amp; preparedStatements&amp; bindValue 强>