我今天开始阅读有关SQLi和DoS / DdoS的不同文章,以了解如何保护我的网站,我发现了这一点:
// DB connection
// $id = (int)$_GET['id'];
$id = $_GET['id'];
$result = mysql_query("SELECT id,name,pass FROM users WHERE id = $id")
or die("Error");
if($data = mysql_fetch_array($result))
$_SESSION['name'] = $data['name'];
if(preg_match('/(benchmark|sleep)/i', $id))
exit('attack'); // no timing
我想知道这个的使用。此后,这个人展示了如何绕过它,我想知道PDO是否是水星?
答案 0 :(得分:1)
if(preg_match('/(benchmark|sleep)/i', $id))
检查$id
是否与字符串benchmark
或sleep
匹配(i代表不区分大小写)。
在上下文中,我会说这没有任何意义但是......我宁愿这样做,并且完成它:
$id = (int) $_GET['id'];
$result = mysql_query('SELECT id,name,pass FROM users WHERE id = '.$id);
注意我将id转换为int,所以如果它是其他任何东西它应该最终为0,这很可能不匹配任何东西,因为id列通常从1开始(从我的经验来看)。
答案 1 :(得分:1)
我想知道这个
的用法
这是一个非常愚蠢而且显然无用的尝试来检测可能的SQL注入,它应该运行一个耗费资源的查询。
此后,这家伙还展示了如何绕过它
难怪。
一旦你有一个打开注射的代码,thaere就有数以千计的方法来运行它。
唯一关注的应该是注射。
一旦你受到保护 - 就不可能进行ddos注射。
我想知道PDO是否是水星?
首先,它不是PDO安全的,但严格且持续使用预备语句被认为是安全的。