1

我今天开始阅读有关 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 是否安全?

4

2 回答 2

1

if(preg_match('/(benchmark|sleep)/i', $id)) checks if the $id matches the strings benchmark or sleep (the i stands for case-insensitive).

In the context it's presented I'd say this makes no sense what so ever though... I'd rather do this, and be done with it:

$id = (int) $_GET['id'];

$result = mysql_query('SELECT id,name,pass FROM users WHERE id = '.$id);

Notice I cast the id to an int, so if it's anything else it should just end up being 0, which most likely doesn't match anything since id columns usually starts on 1 (from my experience anyways).

于 2012-02-27T10:58:58.587 回答
1

我想知道这个的用途

这是非常愚蠢且显然无用的尝试来检测可能的 SQL 注入,该注入应该运行一个消耗资源的查询。

在此之后,这个家伙还展示了如何绕过它

难怪。
一旦你有一个开放的代码注入,就有成千上万的方法来运行它。

您唯一关心的应该是一般的注射

一旦受到保护 - 就不可能进行 ddos​​ 注入。

我想知道 PDO 是否安全?

首先,它不是 PDO 安全的,而是严格且不断地使用被认为是安全的准备好的语句

其次,不,准备好的语句只能解决一半的问题

于 2012-02-27T11:35:18.520 回答