2010-11-07 59 views
1

有些老兄向我挑戰,讓他注入他的代碼。他說標題中的PHP函數應該足夠用於這種情況。繞過mysql_real_escape_string的保護

$var = 'my malevolent input will be in here'; 
$var = mysql_real_escape_string($var); 

$sql = "SELECT * FROM `users` WHERE `id` = '$var'"; 

mysql_query($sql); 

我似乎無法繞過單引號轉義。我應該使用什麼作爲$ var的值? 可以我用什麼東西?

感謝一如既往

+0

可疑的挑戰是安全的。他不是還挑戰你進入諾克斯堡嗎? – 2010-11-07 18:51:58

+0

@Col鄰居挑戰我在他放假前闖入他的公寓。任何工具或想法? :) – 2010-11-07 18:53:38

+2

可能的重複:http://stackoverflow.com/questions/1220182/does-mysql-real-escape-string-fully-protect-against-sql-injection – stillstanding 2010-11-07 18:54:17

回答

2

不,使用mysql_real_escape_string被認爲對任何輸入都是安全的,除非通過使用mysql_client_encoding未正確設置字符編碼。

+0

你碰巧知道特定的利用示例的鏈接錯誤的人物設置了你的頭頂? (不需要挖,只是好奇) – 2010-11-07 18:45:14

+0

@Pekka:[Chris Shiflett'''addslashes()'與'mysql_real_escape_string()'「](http://shiflett.org/blog/2006/jan/addslashes-versus- mysql-real-escape-string)有一個例子。 – Gumbo 2010-11-07 18:48:24

2

雖然可能在一定條件下,這種特定的服務器版本深奧的漏洞,因爲據我所知,這種方式通常被認爲是安全的使用mysql_real_escape_string()

0

你在代碼中有一個錯誤:

$sql = "SELECT * FROM 'users' WHERE 'id' = '$var'";

應該

$sql = "SELECT * FROM 'users' WHERE 'id' = '".$var."'";

如果你不知道,如果id爲整數,或字符串。

如果確定該ID始終是一個整數,則:

$sql = "SELECT * FROM 'users' WHERE 'id' = ".intval($var)

而且你將與mysql_real_escape_string();^_^

+0

你沒有讀過這個問題,是嗎? – 2013-03-05 17:45:02

+0

oops。哈哈)正在瀏覽看到奇怪的代碼並張貼.. http://www.topito.com/wp-content/uploads/2013/01/code-31.gif – rinchik 2013-03-05 17:48:40