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

所以我知道MySQL注入并在将它放入我的数据库之前总是转义我的所有用户输入.但是我想知道,想象一个用户试图提交一个查询注入,我逃避它.如果我稍后从数据库获取此值并在查询中使用它,该怎么办?我必须再次逃脱吗?

所以:(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注入尝试仍保留在数据中.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...