Php preg_match(‘/(基准| sleep)/i’,$id)有什么用途

Php preg_match(‘/(基准| sleep)/i’,$id)有什么用途,php,sql-injection,ddos,Php,Sql Injection,Ddos,我今天开始阅读关于SQLi和DoS/DdoS的不同文章,以了解如何保护我的站点,我发现了这一点: 链接: 我想知道它的用法。在这之后,这个家伙展示了如何绕过它,我想知道PDO是否安全?如果preg_match'/benchmark | sleep/I',$id检查$id是否与字符串基准匹配,或者sleep I代表不区分大小写 在所呈现的背景下,我认为这毫无意义,尽管如此。。。我宁愿这样做,也不想再做了: $id = (int) $_GET['id']; $result = mysql_quer

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

链接:

我想知道它的用法。在这之后,这个家伙展示了如何绕过它,我想知道PDO是否安全?

如果preg_match'/benchmark | sleep/I',$id检查$id是否与字符串基准匹配,或者sleep I代表不区分大小写

在所呈现的背景下,我认为这毫无意义,尽管如此。。。我宁愿这样做,也不想再做了:

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

$result = mysql_query('SELECT id,name,pass FROM users WHERE id = '.$id);
请注意,我将id强制转换为int,因此,如果它是其他值,那么它应该是0,这很可能与任何值都不匹配,因为根据我的经验,id列通常从1开始

我想知道这个的用途

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

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

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

你唯一关心的应该是注射

一旦您受到保护,就不可能进行ddos注入

我想知道PDO是否安全

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


其次,

您还应该阅读mysql注入,并使用准备好的语句而不是mysql函数,或者至少使用mysql\u real\u escape\u stringOh。。这是10000%错误使用$id,是一个数字字段,然后执行强制转换或转义值即可…谢谢@lawrencerone,但我使用PDO,所以我不使用mysql\u real\u escape\u string您可以在PHP手册中阅读关于preg\u match的内容,它应该会给您一些提示:-您的问题相当广泛,您应该对其重新命名,以更清楚地说明您的问题所在。@Lawrence mysql\u real\u escape\u string对这段代码没有帮助。想想看,这并不是因为mysql_*函数出了问题,而是因为PHP用户根本不知道如何使用它们。出于同样的目的,我使用了intval函数:$id=intval$\u GET['id'];值得一提的是,正则表达式将在字符串的任何一点匹配基准或sleep,它将匹配somesleeps,例如。。。为了只匹配精确的单词,正则表达式应该是/^benchmark | sleep$/i@J.Bruni在这种情况下,匹配精确的单词是没有意义的。@Col.Shrapnel:的确,从安全角度来看是没有意义的;我只是澄清了答案,并教授了一些关于正则表达式的知识。我不使用任何参数化的东西,比如PDO或其他任何东西。我确实使用占位符方法。通常是这样简单的:$sql=sprintf'SELECT field FROM table WHERE somefield=%1$s;',intval$param;,其中占位符可以是任何内容。。。INSERT或IN子句的值的逗号分隔列表,按方向排序的字符串值、ASC或DESC。。。什么都行![继续…]嘿,你把我们链接到了一个编辑页面链接应该是我也弄错了!我最近的两条评论说我也应用了占位符方法,这应该是为你的答案而做的,而不是其他添加评论的地方…好吧,请随意移动到这里。我使用的是同样但更强大的方法,所以如果我使用PDO和bindParam,我安全吗?@Marian请关注我特别强调的链接,以方便您。先谢谢你。
$id = (int) $_GET['id'];

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