2017-04-25 52 views
0

我正在測試我的mysql代碼漏洞。
這是PHP注入:如何將php代碼插入數據庫?

$myvar = "varname"; 
$x = $_GET['arg']; 
eval("\$myvar = \$x;"); 

或任何其他的PHP代碼,像打擊:

<?php mysqli_close($conn); ?> 

我的目的是將它們插入到數據庫,但不執行這些命令。
Actualy這些代碼要去插入DB從用戶一個HTML輸入形式和我灣以顯示它們爲用戶(某物等消息)
問題
的問題是,當嘗試插入他們到DB它失敗,我的插入查詢是這樣的:

mysqli_query($conn,"INSERT INTO table (usr,id,message,date) VALUES ($usr,'$id','$message','$date')"); 

該代碼在$message
我還應該添加此驗證功能:

function validate($data) 
{ 
    stripslashes($data); 
    htmlspecialchars($data); 
    htmlentities($data); 
    strip_tags($data); 
    addslashes($data); 
    return($data); 
} 

通過此功能validate($message)插入$message到DB我已經驗證過,但即使這樣能不能解決問題。


我已經搜索,但沒有結果在谷歌這個問題!
任何人都知道如何將代碼插入MySQL數據庫?

+0

簡單地使用準備好的statemants,而不是自行清除插入數據。順便說一句:在保存到數據庫之前,'base64_encode'如何?然後,你不會遇到單引號和反斜線的問題,這些問題可以成爲php的一部分。 – JustOnUnderMillions

+0

而你的'validate()'函數只是一個註釋:你不改變數據。通常在PHP中,您將執行此操作'$ data = stripslashes($ data);''data = htmlspecialchars($ data);'取決於使用的函數。閱讀更多關於php.net的每個功能。 – JustOnUnderMillions

+1

剛剛看了一下準備的語句:http://php.net/manual/en/mysqli.prepare.php http://stackoverflow.com/questions/1290975/how-to-create-a-secure-mysql-prepared-聲明在PHP – Alex

回答

0

real_escape_string功能讓您遠離輸入數據:http://php.net/manual/en/mysqli.real-escape-string.php

現在可以安全地創建,你可以在SQL語句中使用合法的SQL字符串。

+0

感謝您的答案。我知道這個功能,但我很久沒有使用它了,我完全忘了它! –

+0

另外我應該添加這個到你的答案來完成它:使用'htmlspecialchars()'在html頁面中顯示php代碼。 –

+0

更好的主意是使用準備好的語句,就像@Alex提到的一樣。我的解決方案嚴格針對您的具體問題。 –

0

插入代碼的PHP數據庫,以下這個選項:1。 插入數據,使用用htmlspecialchars。例如:

$string = '<?php echo "Hello world"; ?>'; 
htmlspecialchars($string); 
  • 讀之前/獲取數據,使用htmlspecialchars_decode。例如:htmlspecialchars_decode($string);

    希望這也許能幫助你:-)