preg_match有什么用('/(benchmark | sleep)/ i',$ id)

时间:2012-02-27 10:46:58

标签: php sql-injection ddos

我今天开始阅读有关SQLi和DoS / DdoS的不同文章,以了解如何保护我的网站,我发现了这一点:

链接:link to the article

 // 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是否是水星?

2 个答案:

答案 0 :(得分:1)

if(preg_match('/(benchmark|sleep)/i', $id))检查$id是否与字符串benchmarksleep匹配(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安全的,但严格且持续使用预备语句被认为是安全的。

其次, nope, prepared statements helps only half the problem