Mysql和php修复程序复制PDO安全性

Mysql和php修复程序复制PDO安全性,php,security,validation,pdo,sanitization,Php,Security,Validation,Pdo,Sanitization,我知道使用PDO使SQL注入几乎不可能。 但是,我现在没有时间更改我们网站中所有与数据库相关的代码。(特别是因为我是PDO的新手,所以需要一些学习曲线)。所以我想知道哪些mysql/php函数将提供与PDO相同的安全性 这两点是否足够 确保所有$\u GET和$\u POST数据都是预期的类型(例如产品ID应该是数字的,所以我可以使用is\u numeric) 使用mysql\u real\u escape\u string 或者我还应该做什么?网站的方式是,基于查询字符串中的id=x,事情可能

我知道使用PDO使SQL注入几乎不可能。 但是,我现在没有时间更改我们网站中所有与数据库相关的代码。(特别是因为我是PDO的新手,所以需要一些学习曲线)。所以我想知道哪些mysql/php函数将提供与PDO相同的安全性

这两点是否足够

  • 确保所有$\u GET和$\u POST数据都是预期的类型(例如产品ID应该是数字的,所以我可以使用
    is\u numeric
  • 使用
    mysql\u real\u escape\u string

  • 或者我还应该做什么?网站的方式是,基于查询字符串中的
    id=x
    ,事情可能会转到数据库。黑客攻击后我看到的是,在数据库中,所有可以通过查询字符串进入数据库的东西都被诸如
    cd等/pwd
    之类的值破坏了

    简短版本:从mysql扩展移到,并替换将参数带到准备语句()的查询

    但从长远来看,现在学习PDO不会花那么长时间,值得付出努力

    作为旁注:

    我知道使用PDO使SQL注入几乎不可能

    事实并非如此,可以在PDO中编写可注入查询。PDO中的这段代码与旧mysql扩展中的代码一样糟糕(这里一个漏洞的代价是两个漏洞向量!):


    PDO只提供保护自己的工具,并使其易于使用。你总是,总是必须自己验证和过滤输入。但使用prepared语句,您至少可以让数据库知道什么应该是参数,什么应该是查询的一部分。

    PDO其实并不难。也许这会有所帮助:如果你真的没有时间,你应该看看这个StackOverflow帖子:Prepared statements上与mysqli相关的答案。不仅PDO已经准备好了语句。顺便说一句,这个具体的答案就是我所指的:(正如@sectus提到的,准备好的语句…是的)好的,我正在切换到使用PDO。然而,真正帮助我调试应用程序的方法之一是在开发过程中回显我的查询,就像
    echo“the sql:”$sql。通过使用PDO,我可以不再有这种便利吗?我们怎样才能重复事先准备好的陈述?
    
    $pdo_obj->query("SELECT password FROM users WHERE id = '".$_GET['id']."'");