2017-05-04 102 views
1

我知道這是一個廣泛的問題,但我想我在這裏錯過了一些東西。簡單地使用inspect元素並編輯javascript和html,攻擊者是否有可能造成網站損壞?例如,有人很容易改變輸入的最大長度,並上傳太多的數據以至於可能導致服務器崩潰,我知道在服務器上檢查數據總是一個好習慣,但它仍然看起來太簡單了。或者另一個更具潛在危險的例子是,如果攻擊者可以混淆$.ajax調用並向服務器發送不良信息。在攻擊者的瀏覽器上,我應該更多地擔心還是僅僅是暫時的變化?攻擊者是否可以使用檢查元素?

+0

答案是肯定的。 – wOxxOm

+0

他們根本不必使用網絡瀏覽器。他們可以拋出他們想要在您的網站上的任何地獄網絡請求,這可能看起來不像在正常使用中會發生什麼。您必須爲看起來像幾乎任何事情的請求做好準備。 – user2357112

回答

1

這些更改在個人用戶的瀏覽器上是臨時的。

但是,這些更改將允許該用戶與您的後端交互,但他們選擇這樣做。這是網站受到攻擊的一種方式。

標準規則是永遠不會信任來自用戶/瀏覽器的輸入。不要相信隱藏字段的值,不要相信他們沒有改變長度,不相信他們沒有添加新值(比如下拉菜單),不信任任何在Javascript中完成的驗證,等

一些例子:

  • 在過去,一些購物網站將包括支付爲形式的隱藏字段中輸入金額。在更改此值的同時,仍然批准交易時更改了信用卡收取的金額。
  • 帶有Javascript驗證規則的網站,可以通過直接發佈到後端服務,直接發佈自己的SQL和HTML/Script注入攻擊來跳過。
  • 下拉菜單,單選按鈕和複選框輸入可以將意外值添加到表單中。
+0

添加到Trevor的回覆:通過了解網站在實踐中被攻擊的方式,海報將會受益。幾乎每個黑客都使用[打嗝套件](https://vimeo.com/148320460)。 – TheGreatContini

+0

好的,所有這些答案都嚇我一跳!我想我需要非常小心服務器端驗證。很好的答案btw! –

0

你應該爲此擔心。永遠不要相信來自客戶端的輸入。不要指望你在客戶端執行的任何檢查是真正執行的。你總是需要檢查服務器端的輸入。正如您已經提到的,用戶可以使用各種檢測工具來更改本地代碼或完全手工製作惡意數據包。

0

是的,他們可以。當他們檢查元素時,他們可以在本地修改所有內容,所以它會對本地環境進行臨時修改,但是他們可以修改可能影響服務器的值。

例如,假設您有一個在線商店,並且您有一個「編輯產品」選項。一旦你到達那裏,你有一個隱藏的字段,在那裏你存儲產品ID,這樣當你試圖更新後端產品時,你將使用該ID來知道哪個產品要更新。攻擊者可以輕鬆更改該值,現在他可以修改任何其他產品(包括不屬於他的產品)。

另一個典型的例子是一些領域,在那裏你假設用戶將只能提交數值,所以在後端,您使用的號碼與您的查詢,例如,像

"SELECT * FROM Products WHERE Price > " + Price; 

您期待的數值,因此您認爲攻擊者無法發送SQL注入的文本,但他可以輕鬆修改該值(通過更改文本輸入的數字輸入,在發送之前修改javascript值或攔截網絡流量並從那裏修改值),現在您可以得到類似的結果:

"SELECT * FROM Products WHERE Price > 0; DROP TABLE Products--" 

這就是你永遠不應該信任用戶輸入的主要原因。你期待一個數值嗎?然後在使用它之前確保它是一個數字。您的用戶是否更新產品?確保產品在更新之前確實屬於他。你的數據是否有maxlength屬性?仔細檢查您的服務器以確保它仍然具有有效的長度。

這看起來很簡單,但人們會犯錯誤。一個簡單的例子是「心臟出血」錯誤,其中所有可能通過驗證請求的長度而避免,而不是信任用戶提交的數據。

這就是爲什麼您永遠不要信任用戶提交的數據,並且始終在您的後端執行雙重檢查的主要原因。

相關問題