php - 是否需要从数据库中转义用户输入?

标签 php mysql escaping sql-injection user-input

所以我知道 MySQL 注入(inject),并且总是在将所有用户输入放入我的数据库之前对其进行转义。但是我想知道,假设一个用户试图提交一个查询来注入(inject),而我逃避了它。如果我稍后从数据库中获取这个值,并在查询中使用它会怎样?我必须再次逃脱吗?

所以:(sql::escape() 包含我的转义函数)

$userinput = "'); DROP `table` --";
mysql_query("INSERT INTO `table` 
             (`foo`,`bar`) 
             VALUES 
             ('foobar','".sql::escape($userinput)."')");

// insert php/mysql to fetch `table`.`bar` into $output here

mysql_query("INSERT INTO `table2` 
            (`foo`,`bar`) 
            VALUES
            ('foobar','".$output."')");

MySQL 会自动转义它们的输出或类似的东西,还是我也应该在第二个查询中转义?

这是一个测试用例,但它在我的程序中以其他方式发生,我想知道对于这种情况,安全性必须有多严格。

编辑

我的转义函数

static function escape($string){

    if(get_magic_quotes_gpc()) 
        $string = stripslashes($string); 

    return mysql_real_escape_string($string);

}

最佳答案

Does MySQL automatically escape their output or something like that, or should I escape in the second query as well?

您还需要在第二个查询中转义。 MySQL 不会对其输出进行任何转义。

长答案:MySQL 字符串转义不会修改正在插入的字符串,它只是确保它不会对当前查询造成任何伤害。任何 SQL 注入(inject)尝试仍保留在数据中。

关于php - 是否需要从数据库中转义用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7441684/

相关文章:

string - 转义postgresql中的所有单引号

php - 通过数据透视表进行 Eloquent or 查询

php - 如何将多个复选框及其文本字段插入 MySQL 数据库

php - 如何通过php从数据库中获取特定字段

python - 一个奇怪的空间问题 Python

php mysql where 仅列值的一部分

php - 获取 Laravel 中的所有 ENV 变量

php - 如何从 CentOS 7 上安装的 PHP 7、Plesk 12.5 连接 MSSQL

java - 如何使用 JAXB 编码器处理转义字符

python - Plone python脚本中的字符串转义