为了账号安全,请及时绑定邮箱和手机立即绑定

无需连接数据库即可替代mysql_real_escape_string

无需连接数据库即可替代mysql_real_escape_string

一只名叫tom的猫 2019-12-20 10:51:00
我想有一个不连接数据库就表现为mysql_real_escape_string的功能,因为有时我需要在没有数据库连接的情况下进行干式测试。mysql_escape_string已被弃用,因此是不可取的。我的一些发现:http://www.gamedev.net/community/forums/topic.asp?topic_id=448909http://w3schools.invisionzone.com/index.php?showtopic=20064
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

没有DB连接就无法安全地转义字符串。mysql_real_escape_string()并且准备好的语句需要连接到数据库,以便它们可以使用适当的字符集转义字符串-否则,使用多字节字符仍然可能发生SQL注入攻击。

如果仅测试,那么您可能还可以使用mysql_escape_string(),它不能100%保证不会受到SQL注入攻击,但是如果没有数据库连接就无法构建任何更安全的东西。


查看完整回答
反对 回复 2019-12-20
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

好吧,根据mysql_real_escape_string函数参考页:“ mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,它转义了以下字符:\ x00,\ n,\ r,\,',“和\ x1a。”


考虑到这一点,那么您发布的第二个链接中给出的功能应该完全满足您的需求:


function mres($value)

{

    $search = array("\\",  "\x00", "\n",  "\r",  "'",  '"', "\x1a");

    $replace = array("\\\\","\\0","\\n", "\\r", "\'", '\"', "\\Z");


    return str_replace($search, $replace, $value);

}


查看完整回答
反对 回复 2019-12-20
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

与我的其他答案完全相反,即使使用多字节字符,此后续功能也可能是安全的。


// replace any non-ascii character with its hex code.

function escape($value) {

    $return = '';

    for($i = 0; $i < strlen($value); ++$i) {

        $char = $value[$i];

        $ord = ord($char);

        if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126)

            $return .= $char;

        else

            $return .= '\\x' . dechex($ord);

    }

    return $return;

}

我希望比我自己更有知识的人可以告诉我为什么上面的代码行不通...


查看完整回答
反对 回复 2019-12-20
  • 3 回答
  • 0 关注
  • 888 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信