2013-02-15 70 views
-1

我最近問了一個question關於一個只包含單選按鈕的表單。一位有經驗的用戶回答,並且還告訴我,我對SQL注入非常開放。有人可以解釋一下嗎? - 沒有文本用戶輸入。mysql注入和單選按鈕形式

+0

請顯示你有什麼試過? – 2013-02-15 11:33:05

+0

*任何以超級全球化結束的輸入都需要進行消毒。任何。單選按鈕也不例外。他們的價值觀被髮送到您的腳本,他們很容易被篡改。 – Gordon 2013-02-15 11:34:04

+0

經驗法則是不要信任任何到達服務器的數據。總是假設數據是有害的,直到您證明不正確爲止。永遠不要假設到達的值是你期望的值。 – GarethL 2013-02-15 11:45:44

回答

1

任何用戶都可以使用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(); 
2

用戶可以方便地編輯HTML或以其他方式改變被提交的內容。僅僅因爲它們是單選按鈕並不意味着它們不能改變值;他們可以將它們設置爲任何東西,包括可能導致注入的值。

常見的瀏覽器工具使用戶能夠修改HTTP請求,所以有人可以很容易地改變你的單選按鈕的值爲任何東西。

+0

好的,我明白了。謝謝。這東西真的很危險 – MFA 2013-02-15 11:45:14

0

惡意用戶不需要您的表單來創建自己的POST請求到您的服務器。他們只需要知道服務器接受的表單密鑰,然後他們就可以創建自己的請求。

如果您允許未經轉義的$_POST/$_GET/$_REQUEST/$_COOKIE/(some $_SERVER)值直接插入到您的查詢中,那麼您將受到影響。

爲了安全使用帶有PDO或mysqli的參數化查詢。

請閱讀這篇文章:How can I prevent SQL injection in PHP?

1

一種形式提供一個意味着人們將數據提交到您的HTTP終點,但人們並不需要用它來提交數據。例如,他們可以創建自己的表單,或者手動構建HTTP請求。

您發送給客戶的任何內容都可以阻止人們提交他們想要的任何內容。

由於無法控制它將接收的輸入,因此終點需要安全,以防止任何輸入。