2017-04-22 84 views
-1

我需要一些幫助,在我的數據庫中找到一個奇怪的代碼。 它看起來像有人試圖提交GET請求。 我發現的代碼是:GET請求中的奇怪代碼PHP

/news/html/?0'union/**/select/**/1/**/from/**/(select/**/count(*),concat(floor(rand(0)*2),0x3a,(select/**/concat(user,0x3a,password)/**/from/**/pwn_base_admin/**/limit/**/0,1),0x3a)a/**/from/**/information_schema.tables/**/group/**/by/**/a)b/**/where'1'='1.html/ 

據我所知,他們正試圖得到一些信息,但什麼是他們試圖獲得準確,如何保護我免受這種代碼的網站?

非常感謝!

+3

看起來他們正試圖利用SQL注入漏洞ility。沒有SQL注入漏洞,你會沒事的。這是一個很好的閱讀主題:https://secure.php.net/manual/en/security.database.sql-injection.php這也是一個很好的開始:https://stackoverflow.com/questions/60174/how-can-i-prevent-sql -injection-in-php – David

+0

您也可以創建白名單或黑名單,並檢查是否有任何請求包含注入代碼(ei:1 = 1,';)等,具體取決於很多「白色」或者需要多少「黑色」,其中一個或另一個可以作爲附加層添加。我重複說,作爲一個額外層添加,正確的注入安全(準備好的聲明,..PROPER轉義)是強制性的。一切都在上面的@David發佈的鏈接中解釋。 –

回答

0

這是SQL注入,您需要轉義您的查詢。

+0

避免我的疑問的最佳方法是什麼? –

+0

你用什麼? mysql_函數,pdo,mysqli? – getl0st

+3

@VictorRusu:「退出您的查詢」有點令人誤解。底線是您不需要執行用戶可修改的值作爲SQL代碼。在大多數情況下,這可以通過預準備語句和查詢參數來完成。 – David

1

GET要求每個參數都應該寫入Database前進行轉義,如果您使用的PDO,你可以這樣做:

$requestedString = $_GET["string_param_1"]; 
$db -> prepare("INSERT INTO mytable (name) VALUES (:name)"); 
$db -> bindParam(":name", $requestedString); 
$db -> execute(); 

bindParam方法'" 之前,但如果添加\符號'不使用PDO,你可以這樣做:mysql_real_escape_string($requestedString),但這種方式已經deporased

+0

我使用PDO,但採用與您不同的方式。 $ sel = $ db-> prepare(「SELECT id FROM categories WHERE id =:id」); $ sel-> execute(array('id'=> $ idcat)); 這種事真的很安全嗎? –

+0

'「GET請求的每個參數」 - 更像*任何用戶可修改的值*。值直接來自哪裏並不完全相關(並且查詢字符串參數幾乎不是唯一檢查的地方)。 – David

+0

所以如果我使用prepare()和execute()而不使用bindParam(),它仍然是脆弱的。對? –