2011-08-27 134 views
0

所以我只是測試了mysql_real_escape();函數,並且它在"之前放置了一個\。當內容回顯到頁面上時,我只需在"之前獲得\'的內容。所以我們假設我發佈了"""""""""""""""""""""""""""",我得到的結果是\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"SQL注入幫助

有一些代碼刪除時,它的回顯到頁面上的\

+0

您使用'mysql_real_escape_string()'當你即將把字符串到數據庫中。當您從數據庫中讀取字符串時,它們將被轉義。很顯然,如果你只是'echo mysql_real_escape_string($ my_string))'',你會得到你所看到的效果。 –

+1

如何將數據插入數據庫?如果您正在執行手動構建的INSERT查詢,則需要'mysql_real_escape_string()'。如果您正在使用準備好的語句(傳遞值作爲參數插入),那麼不要。請粘貼一個行爲不正確的最小代碼示例。 – Crack

回答

5

通過添加那些斜線,只是mysql_real_escape_string轉換串入數據庫的輸入格式。當數據從數據庫中傳出時,它應該沒有任何斜槓出現。你不應該自己去除它們。

使用stripslashes與其他人一樣,建議在大多數情況下會做與mysql_real_escape_string相反的操作,但不是全部,而且您不應該爲此目的而依賴它。請注意,如果你發現自己需要使用它,那麼你已經做了一些其他的錯誤。

+0

+1準確!這個結果指向雙重編碼 – Andomar

+0

$ text_share_body = $ _POST ['text_share_body']; $ text_share_body = mysql_real_escape_string($ text_share_body); – frankmeacey

+0

它進入'「的前用「\」 S上的數據庫,但它並不全自動撤消斜槓上輸出 – frankmeacey

2

你不需要unescape,即。刪除斜線 - 它們不會插入到數據庫中。它們僅用於將數據傳遞給MySQL,它們不會寫入數據庫。當你SELECT的數據,你不會看到斜槓。

1

你知道如何mysql_real_escape()作品。提示:它允許爲SQL使用編碼字符串。例如mysql_query('SELECT * FROM users WHERE name="'.mysql_real_escape_string($name).'"');。它可以用來插入不會引用引號的字符串,例如" or 1=1 -- "製作爲SELECT * FROM users WHERE name="" or 1=1。你必須在之前激活它插入它的數據庫。

當你將讀取該數據,斜線將不以任何方式存在。

其實,看着下面是什麼,我會做出這樣的回答,不作評論...