亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無需連接數據庫即可替代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?!?/p>


考慮到這一點,那么您發布的第二個鏈接中給出的功能應該完全滿足您的需求:


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 關注
  • 968 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號