我已經爲PHP和mySQL中的項目創建了一個簡單的登錄表單。我閱讀關於SQL注入和XSS的安全和信息。 如何用這些東西測試我的表單?我的意思是我把它放在哪裏? 我發現這樣的事情' or 1=1–
和SQL查詢,如如何測試我的簡單mysql登錄表單的SQL注入?
SELECT fieldlist
FROM table
WHERE field = '$EMAIL';
我知道這是一個愚蠢的問題,但我不知道答案!
我已經爲PHP和mySQL中的項目創建了一個簡單的登錄表單。我閱讀關於SQL注入和XSS的安全和信息。 如何用這些東西測試我的表單?我的意思是我把它放在哪裏? 我發現這樣的事情' or 1=1–
和SQL查詢,如如何測試我的簡單mysql登錄表單的SQL注入?
SELECT fieldlist
FROM table
WHERE field = '$EMAIL';
我知道這是一個愚蠢的問題,但我不知道答案!
輸入input = $EMAIL
值asdf' or '1'='1
在輸入並提交,看看你是否得到真正的結果。
所以生成的查詢是
SELECT fieldlist
FROM table
WHERE field = 'asdf' or '1'='1';
要檢查,如果密碼不空。
if(!isset($_POST['password']))
而且這樣做會比較好,如果
$username = trim($_POST['username']); //also turn magic quotes
//or add slashes to prevent sql injection
$password = md5(trim($_POST['username'])); //encrypt the password
SELECT *
FROM user
WHERE username = `$username` AND
password = `$password` LIMIT 1;
if(mysql_num_rows($result)) //if the count is 1, then, the the user exists
//do the login
你會提交可疑的字符串到您的登錄表單。
從那裏,字符串' or 1=1-
(或任何你想測試的)將被髮送到你的服務器,而PHP如果設置不當,會直接將該字符串發送到你的MySQL數據庫中,如果它是有效的SQL,將被執行。
嗨,在用戶名或密碼箱? – EnexoOnoma 2011-04-05 04:21:44
@Punkis:兩者。還有其他地方你接受用戶輸入。 – 2011-04-05 04:26:47
另一個小問題。我有一個你輸入密碼的頁面。然後登錄頁面檢查密碼(abcdef)是否與我在表單中寫入的密碼相同。 abcdef不是編碼,只是一個簡單的if語句。 – EnexoOnoma 2011-04-05 04:28:59
你會通過形式本身的惡意代碼進入,所以它被髮送到PHP,然後到MySQL。如果惡意代碼改變了你的查詢,那麼你的代碼就容易受到SQL注入的攻擊。看看mysql_real_escape_string()
。此外,這給讀,以幫助您開始:
在用戶名或密碼字段? – EnexoOnoma 2011-04-05 04:21:27
@Punkis同時檢查,如果你有魔術引號關閉或 – 2011-04-05 04:21:50
另一個小問題。我有一個你輸入密碼的頁面。然後登錄頁面檢查密碼(abcdef)是否與我在表單中寫入的密碼相同。 abcdef不是編碼,只是一個簡單的if語句。 – EnexoOnoma 2011-04-05 04:29:24