我最近問了一個question關於一個只包含單選按鈕的表單。一位有經驗的用戶回答,並且還告訴我,我對SQL注入非常開放。有人可以解釋一下嗎? - 沒有文本用戶輸入。mysql注入和單選按鈕形式
回答
任何用戶都可以使用DOM瀏覽器(如Firefox中的Firebug)或Chrome中包含的DOM Explorer來編輯這些字段。 (檢查元素選項)
沒有用戶輸入,但用戶仍然可以編輯DOM結構幷包含。
但不僅僅是編輯它們。如果您的網站不安全,則任何人都可以在自己的計算機上創建表單或使用自己的輸入創建表單,然後通過POST
將其發送到您的網站。
您可以在this site瞭解更多關於安全和PHP的信息。
除了過濾輸入之外,避免SQL注入的最好方法是使用安全調用DB使用PDO或預準備語句。
例如:
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
用戶可以方便地編輯HTML或以其他方式改變被提交的內容。僅僅因爲它們是單選按鈕並不意味着它們不能改變值;他們可以將它們設置爲任何東西,包括可能導致注入的值。
常見的瀏覽器工具使用戶能夠修改HTTP請求,所以有人可以很容易地改變你的單選按鈕的值爲任何東西。
好的,我明白了。謝謝。這東西真的很危險 – MFA 2013-02-15 11:45:14
惡意用戶不需要您的表單來創建自己的POST請求到您的服務器。他們只需要知道服務器接受的表單密鑰,然後他們就可以創建自己的請求。
如果您允許未經轉義的$_POST/$_GET/$_REQUEST/$_COOKIE/(some $_SERVER)
值直接插入到您的查詢中,那麼您將受到影響。
爲了安全使用帶有PDO或mysqli的參數化查詢。
一種形式提供一個意味着人們將數據提交到您的HTTP終點,但人們並不需要用它來提交數據。例如,他們可以創建自己的表單,或者手動構建HTTP請求。
您發送給客戶的任何內容都可以阻止人們提交他們想要的任何內容。
由於無法控制它將接收的輸入,因此終點需要安全,以防止任何輸入。
- 1. 形式單選按鈕
- 2. 以輸入形式從mysql獲取單選按鈕數據
- 3. 單選按鈕在我的形式3的單選按鈕顯示形式
- 4. PHP單選按鈕形式示例
- 5. 如何更新形式單選按鈕
- 6. 形式的Django單選按鈕
- 7. 從單選按鈕調用形式
- 8. javascript驗證單選按鈕的形式
- 9. 添加單選按鈕,郵件形式
- 10. perl CGI單選按鈕形式
- 11. Django中的單選按鈕形式
- 12. 以Zend形式裝飾單選按鈕
- 13. PHP的形式,多個單選按鈕
- 14. 導軌 - 動態形式單選按鈕
- 15. 未提交的單選按鈕形式
- 16. 形式與單選按鈕和複選框發送到PHP
- 17. 將單選按鈕插入MySQL
- 18. 專注於單選按鈕
- 19. 樣式複選框和單選按鈕
- 20. 的web2py - 顯示單選按鈕,進入我的形式
- 21. Angular2反應形式單選按鈕形式控制
- 22. 單選按鈕php mysql
- 23. 用單選按鈕寫入樣式表
- 24. django嵌入式formset的單選按鈕
- 25. 單選按鈕和
- 26. 單選按鈕隱藏和顯示形式內容
- 27. 對齊輸入和單選按鈕
- 28. 單選按鈕和輸入字段
- 29. 根據單選按鈕選擇注入用戶控件(ASP.NET MVC)
- 30. 關注輸入應該選擇一個單選按鈕
請顯示你有什麼試過? – 2013-02-15 11:33:05
*任何以超級全球化結束的輸入都需要進行消毒。任何。單選按鈕也不例外。他們的價值觀被髮送到您的腳本,他們很容易被篡改。 – Gordon 2013-02-15 11:34:04
經驗法則是不要信任任何到達服務器的數據。總是假設數據是有害的,直到您證明不正確爲止。永遠不要假設到達的值是你期望的值。 – GarethL 2013-02-15 11:45:44