我的頁面只顯示數據庫表中的數據,php頁面只顯示沒有任何按鈕,鏈接,下拉菜單或表單的信息。使用沒有用戶交互能否仍然可以獲得SQL注入
林老的MySQL而不是庫MySQLi或PDO的語法
我仍然可以得到一個SQL注入入侵?
我的頁面只顯示數據庫表中的數據,php頁面只顯示沒有任何按鈕,鏈接,下拉菜單或表單的信息。使用沒有用戶交互能否仍然可以獲得SQL注入
林老的MySQL而不是庫MySQLi或PDO的語法
我仍然可以得到一個SQL注入入侵?
這一切都取決於查詢源。如果您的SQL查詢的任何部分來自用戶輸入(換句話說;如果不是您的整個查詢字符串是一個字符串常量),那麼您是不安全的。
例如:
SELECT * FROM USERS ;
SELECT * FROM myTable WHERE id = 5;
是安全的,但
SELECT * FROM myTable WHERE id = (some variable derived from user input like querystring or post-form)
是DEFINETELY沒有。
您應該使用
SELECT * FROM myTable WHERE id = @0
語法最大的安全性。這是防止SQL注入安全的唯一經過驗證的方法。
爲了使SQL注入工作,他們需要一種將SQL代碼發送到服務器的方式,因爲沒有任何輸入,理論上他們無法注入SQL。 (雖然我不是這方面的專家)
我仍然會推薦你使用像mysqli或PDO這樣的框架,你應該熟悉這樣的框架,因爲它們已經成爲網站設計的常態。
「沒有輸入」可能意味着「我沒有任何形式」,但仍可能意味着「我有非限制性參數用作限制」。 – tadman
SQL注入是通過向正在執行的SQL注入字符串來實現的。
這是最簡單的,如果應用程序爲您提供一個很好的文本框,其內容粘貼到SQL查詢中,但也可以通過其他方式。例如,如果您的報告應用程序使用任何類型的HTTP請求來顯示數據,攻擊者可以使用WGET來欺騙請求並注入SQL。例如,如果您的報告的網址格式爲http://myserver/report.php?month=february
,並且您使用february
來構建SQL查詢,那麼您很容易受到攻擊。
如果查詢獨立於您的請求是安全的。被警告說,意味着用戶非常有創意。您可能對某些您不瞭解的用戶數據有依賴性。例如。像這樣的腳本可能被打破:
$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$sql = "SELECT * FROM entities WHERE id = 7 and locale = '$locale'";
免責聲明:我不知道如果Locale::acceptFromHttp()
做一些驗證。讓我們假設這個帖子的上下文沒有。
我不想說沒有prepared statements就不可能寫出安全的代碼。 OTOH它真的不會傷害他們。
SQL injection如果用戶可控的數據是在SQL語句中使用沒有適當的處理是發生:
軟件構建使用來自上游組件外部影響輸入的SQL命令的全部或一部分,但它確實不會中和或錯誤地中和可能會在發送到下游組件時修改預期的SQL命令的特殊元素。
沒有足夠的用戶可控輸入中刪除或引用SQL語法,生成的SQL查詢可能會導致這些輸入被解釋爲SQL而不是普通用戶數據。
注意,用戶可控制的數據包括能夠由用戶的請求直接或間接的影響,任何數據。相反,這意味着如果你的SQL查詢不包含任何用戶可控制的數據,那麼這意味着如果你的SQL查詢不包含任何用戶可控數據,即,查詢在代碼中是固定的,不受任何可改變的輸入的影響,它不容易受到SQL注入的影響。
我的頁面只顯示數據庫表中的數據,php頁面只顯示他們沒有任何按鈕,鏈接,下拉菜單或表單的信息。
我敢說這樣的設置只是不可能。
有動態網頁,用PHP腳本從數據庫所服務的這個想法,是使用相同的腳本來顯示從數據庫不同內容。
所以 - 或者你確實只有一組靜態頁面(我懷疑) - 你不需要PHP /數據庫 - 然後靜態HTML就足夠了。
或者 - 很可能 - 您有動態頁面顯示基於某種用戶輸入的內容 - 因此完全易受攻擊。
我認爲你需要查詢什麼是SQL注入以及它是如何發生的,答案應該很明顯。如果進入查詢的任何內容都沒有轉義,並且用戶可以操縱它,那麼您的查詢就很容易受到攻擊。有時候,「用戶活動」可能出現在你永遠不會想到的地方,這就是爲什麼使用PDO或mysqli和預先準備的語句更好。如果你只有幾頁,切換不應該花很長時間,在這個過程中你將學習如何使用一個新的API。 – Mike
這就是爲什麼使用合適的[開發框架](http://codegeekz.com/best-php-frameworks-for-developers/)對於那些不知道如何安全編寫SQL的人來說是一個好主意。 – tadman