代码之家  ›  专栏  ›  技术社区  ›  Dan D.

清除整数数据库输入

  •  7
  • Dan D.  · 技术社区  · 15 年前

    我有一个通过POST请求获取数据的应用程序。我正在使用此数据向数据库中插入新行。我知道使用 mysql_real_escape_string() (加上删除%和\)是处理字符串的方法,但是整数值呢?现在,我正在使用PHP函数 intval() 在他们身上。

    intval() 完全安全。我看不到攻击者在运行变量时执行SQL注入攻击的方法 首先(因为它总是返回一个整数),但我想确定比我经验丰富的人是这样的。

    谢谢。

    4 回复  |  直到 15 年前
        1
  •  24
  •   Etienne Dechamps    15 年前

    对, intval() 是安全的。当参数转换为integer时,绝对没有办法执行SQL注入,因为(很明显)integer的格式不允许在其中放入SQL关键字(或引号,或任何东西)。

        2
  •  4
  •   Byron Whitlock    15 年前

    防止SQL注入的最简单方法是始终使用准备好的语句。使用mysqli库或者更好的ORM,比如条令等等。

    然后,您的查询会变成:

    $stmt = $db->prep_stmt("select * from .... where userid = ? and username = ?");
    
    /* Binding 2 parameters. */
    $stmt->bind_param("is", $userid, $username);
    
    $userid = 15;
    $username = "don";
    
    /* Executing the statement */
    $stmt->execute( ) or die ("Could not execute statement");
    
        3
  •  2
  •   mvds    15 年前

    $var = (int)$_POST['var'];
    

    无论您采用哪种方式,子序列中的$var都将是一个实际的整数,处理起来非常安全。

        4
  •  2
  •   Developer    15 年前

    准备语句是处理sql注入的最佳方法。 或使用PDO 否则,intval优于is\u numeric