【问题标题】:PHP & SQL: Best way to protect this query from SQL injections NOT using PDOPHP & SQL:保护此查询免受 SQL 注入的最佳方法,不使用 PDO
【发布时间】:2010-10-20 14:58:08
【问题描述】:

我有一个针对 mssql 数据库运行的查询,但我没有使用 PDO 驱动程序。我可以使用类似准备好的语句吗?

这里是查询:

$tsql = "INSERT INTO cplinktable (liferayid, bmsid, autotaskid, waspdb, cpid) VALUES ($liferayid, $bmsid, $autotaskid, '$waspdb', $cpid)";

谢谢,

琼斯

【问题讨论】:

标签: php sql sql-server sql-injection


【解决方案1】:
【解决方案2】:

您至少应该转义这些值。

PHP Manual - mysql_real_escape_string

【讨论】:

    【解决方案3】:
    $query = sprintf("INSERT INTO cplinktable (liferayid, bmsid, autotaskid, waspdb, cpid) VALUES ('%s','%s','%s','%s','%s')",
                mysql_real_escape_string($liferavid),
                mysql_real_escape_string($bmsid),
                mysql_real_escape_string($autotaskid),
                mysql_real_escape_string($waspdb),
                mysql_real_escape_string($cpid));
    

    【讨论】:

      【解决方案4】:

      它就像在字符串上使用 mysql_real_escape 并在数字/整数/双精度上进行类型转换一样简单

      (int)$number; //Safe
      (double)$double; //Safe
      mysql_real_escape_string($string); //Safe
      

      用于插入数据库的每条数据都是安全的

      【讨论】:

        【解决方案5】:

        尝试使用 sprint() 准备语句

        $tsql = "INSERT INTO cplinktable (liferayid, bmsid, autotaskid, waspdb, cpid) VALUES (%d, %d, %d, '%s', %d)";
        
        $tsql = sprintf($tsql, $liferayid, $bmsid, $autotaskid, $waspdb, $cpid);
        echo $tsql; // you would execute this but printing to the screen to show the query
        

        【讨论】:

          猜你喜欢
          • 2016-11-17
          • 2016-06-16
          • 1970-01-01
          • 1970-01-01
          • 2010-12-24
          • 2015-08-20
          • 2016-05-31
          • 1970-01-01
          • 2020-05-06
          相关资源
          最近更新 更多