可能重複:
What is SQL injection?
XKCD SQL injection - please explainSQL注入概念如何工作? (簡介)
我自己的公司,我希望知道PHP的runabouts而我聘請的人來維護和擴展代碼對於它的網站,我正在關注SQL注入的安全性,並不十分理解這些代碼如何影響SQL數據庫,因爲它們包含在查詢中。
如何顯示安全漏洞,以便我可以看到發生了什麼?
$username = "' OR 1";
查詢變爲:
可能重複:
What is SQL injection?
XKCD SQL injection - please explainSQL注入概念如何工作? (簡介)
我自己的公司,我希望知道PHP的runabouts而我聘請的人來維護和擴展代碼對於它的網站,我正在關注SQL注入的安全性,並不十分理解這些代碼如何影響SQL數據庫,因爲它們包含在查詢中。
如何顯示安全漏洞,以便我可以看到發生了什麼?
$username = "' OR 1";
查詢變爲:
儘管這在很大程度上可以解釋在網上,我有一種感覺,在稍微詳細地解釋這一點。
如果你能想象這個字符串將會變成什麼,你就會明白你正在編寫的腳本的潛在風險,因爲它在實際運行之前會變成別的東西。
一個微不足道的惡意例如:
$fromtheuser = "foo'; DROP TABLE affiliates; --";
$q = "SELECT id FROM affiliates WHERE website = '$fromtheuser'";
你能解釋一下這是什麼會變成什麼?開發者不能。
"SELECT id FROM affiliates WHERE website = 'foo'; DROP TABLE affiliates; --'"
這個矢量是';
結束SQL字符串原始的關鍵部分,並且--'
註釋掉推報價。
你會在代碼中尋找什麼,在將數據放入查詢之前,對數據進行適當的清理和過濾。幫助確保這個前沿的一個重要工具是某種形式的準備好的查詢,在這種情況下,您可以將參數綁定到查詢,以便沒有任何操作。
我們可以通過MySQLi(已改進)或我個人最喜歡的PDO中的準備語句來實現此目的。他們看起來像什麼快速簡要說明。
mysql_real_escape_string(可處理編碼和報價)
<?php
$clean = mysql_real_escape_string($q)
的MySQLi:
<?php
$clean = $mysqli->prepare("SELECT id FROM affiliates WHERE website = ?");
$clean->bind_param('s', $website); //'s' for 'string'
PDO:
<?php
$clean = $pdo->prepare("SELECT id FROM affiliates WHERE website = ?");
$clean->bindParam(1, $website); //you can use :site rather than ? and 1
IMO將參數數組傳遞給PDO的'execute()'方法而不是將參數與單獨的函數調用綁定在一起會更清潔。 – ThiefMaster 2011-03-31 10:35:17
(通過,克里斯的例子_is_ better) – 2011-03-31 11:54:35
mysql_query("SELECT * FROM users WHERE username = '$username'");
看,當我們的$username
變量設置爲討厭的東西會發生什麼
SELECT * FROM users WHERE username = '' OR 1
攻擊者可以使用不當逃脫變量注入SQL到您的查詢,有效地繞過您已有的任何(差)安全措施。
更多信息here
我會看看這個,可能是一個很好的學習經驗。 – Bobrin23 2011-03-31 10:42:02
從事實到來的危險,即SQL查詢中程序。
因此,惡意代碼可以代替某些運營商注入。
字符串被引號分隔。如果字符串內的分隔符未被轉義,它將實際關閉字符串語句,其餘的將成爲惡意代碼。
不僅字符串是動態的。如果$ amount將包含惡意代碼,那麼沒有分隔符將會保護LIMIT $amount
,以及ORDER BY $order
。
謝謝,這是有趣的東西! – Bobrin23 2011-03-31 10:40:03
閱讀本https://secure.wikimedia.org/wikipedia/en/wiki/SQL_injection回來與任何特定問題 – 2011-03-31 10:30:31
可能重複(HTTP [什麼是SQL注入?]://計算器。 com/questions/601300/what-is-sql-injection),請在詢問之前使用[search](http://stackoverflow.com/search?q=sql+injection)。 – fabrik 2011-03-31 10:31:54