黑客在PHP提交中可以突破GET或POST方法的最早地点是什么?突破POST或GET变量PHP,安全
例如,
如果我处理表格第一行是:
$id= $_GET['id'];
$post_id= $_POST['post_id'];
可他们已经插入一些恶意代码,当变量设定为等于未过滤,将执行GET和POST ?
感谢
黑客在PHP提交中可以突破GET或POST方法的最早地点是什么?突破POST或GET变量PHP,安全
例如,
如果我处理表格第一行是:
$id= $_GET['id'];
$post_id= $_POST['post_id'];
可他们已经插入一些恶意代码,当变量设定为等于未过滤,将执行GET和POST ?
感谢
eval($_GET['foo']);
,或间接,在作业后$a = $_GET['foo']; eval($a);
。"="
本身不会触发对分配内容的执行或解释。你可能会认为它是安全的。"="
为“等于”。不要这样做。 通过使用赋值运算符,左操作数被设置为右边表达式的值(不是“等于”,而是“被设置为”)。$a = $_GET['a']; $a();
其实这是我能想到的确定最早的地方一个exec的,我不应该再是一个都舍不得亏的。
我的建议是:
工作流程
不要相信进来的数据。验证它。
使用$_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 &的PreparedStatement & bindValue
只要你不要做一些愚蠢像eval()
他们或直接把那些到MySQL查询,它的罚款。
它们大多只是字符串,所以没有直接的危险(如果你的意思是像Windows上的病毒)。
下面是一些可能的 “恶意” 的东西,你可以得到:
.php
文件,并稍后执行)</html>
)“如果eval()是答案,那么你肯定会问 错误的问题。” - Rasmus Lerdorf,BDFL,PHP – Sammitch
eval()有一个常见用例:在线PHP编辑器,用于实时编码。这就是沙盒的原因。 –
不,在PHP中处理外部输入值不,只要你不使用数据造成任何风险在某些解释性语言中,区分代码和数据。
因为在这种情况下,您可能会受到injection的影响。和解释语言,我的意思是像HTML(Cross-Site Scripting),SQL(SQL Injection),PHP(Code Injection)任何语言,shell命令(Command Injection)etc.
因此,如果您在其他任何方式使用外部数据,确保处理它正确。
+1提供CWE链接 –
不会。当您尝试*使用*这些变量并且它们包含恶意输入时,就会成为问题。 –
约翰说什么。无论何时,当您收到用户的输入时,您都应该验证它是否符合您期望的输入的确切格式,对输入进行清理,并拒绝任何不符合规范的内容。也就是说,您仍然应该使用参数化查询之类的东西来防止SQL注入等常见事情。 – Sammitch
所以这个序列是“完全”安全的: 获取变量未过滤 - >准备语句存储在db->获取表单数据库和显示在HTML使用htmlspecialchars()或htmlentities() – Harvard