簡體   English   中英

這個客戶端應用程序安全嗎?

[英]Is this client side application secure?

這是我用來在客戶端使用 javascript 處理文件的程序的簡化版本。

HTML:

<input id='myinput' type='file' accept='.png, .jpg, .jpeg' /> 

Javascript:

 var myinput = document.getElementById('myinput');
 myinput.addEventListener('change', function(e) {

   /* 1. capture the file */
   var file = e.target.files[0];

   /* 2. make a fileReader object */
   var reader = new FileReader();

   /* 3. the load event listener */
   reader.addEventListener('load', function(e) {
     var fileContentAsText = e.target.result; // <-- is this line safe?
     /* 5. functions for manipulating the file would go here */
   }, false); 

   /* 4. passing the file to the filereader object */
   reader.readAsText(file);

 });

或多或少,我的程序用於處理 png 或 jpg 類型的文件,處理它們,然后使修改后的版本可供下載。

一切都發生在客戶端。

由於沒有任何內容被發送到服務器,是否有任何我應該關注的安全漏洞?

如果我將它發送到服務器,幾乎我為驗證文件所做的一切都將在 php 中進行,並且我可以合理地確保操作足夠安全。

由於我沒有將它發送到服務器,因此我將應用的那些 php 機制都不適用。

實際問題:

  1. 鑒於一切都將在客戶端發生,我是否需要驗證文件?
  2. 如果是這樣,為什么? 我可以采取什么行動?

想到的是設置其他元素的innerHTML的文本框,或者可以利用src/onerror屬性進行惡意目的的文本框。 我需要注意這些類型的攻擊嗎? 因為我在這件事上讀到的所有內容都涉及驗證發送到服務器的文件。

您必須注意諸如跨站點腳本、開放重定向、敏感信息存儲(不是全面列表)等漏洞,這些漏洞也可能影響僅限客戶端的應用程序。

實際上,這意味着重要的部分是注釋中的第5.點 - 加載的文件會發生什么。 例如,您可以在 localStorage 中處理后存儲它的一部分,如果存儲“敏感”信息(無論在您的上下文中),這可能會帶來風險。 或者例如,如果一個零件被寫回給客戶端(如果我理解正確的話,我認為是這種情況),它可能會構成注入威脅。 最直接的注入是 XSS,例如,如果您將一些內容寫入 html,例如圖像 exif 中的注釋。 但是您還應該考慮在用戶收到結果后結果文件會發生什么。 它是否會顯示在可能容易受到某種注入攻擊或例如緩沖區溢出的應用程序中? 考慮一個具有已知緩沖區溢出漏洞的圖像查看器。 假設惡意用戶准備了一個圖像並將其提供給受害者。 此圖像的制作方式可能不會直接導致緩沖區溢出,但在您的應用程序對其進行轉換后,它會利用顯示它的客戶端中的漏洞。 當然,這是 3rd 方客戶端軟件的一個漏洞,但您的應用程序被用來隱藏漏洞並促進攻擊。

因此,嘗試將系統視為一個整體,您的應用程序可能只是復雜攻擊的構建塊,您的目標應該是最大限度地減少對攻擊者的有用性。 這是一個含糊的建議,但這完全取決於您對上傳的文件實際執行的操作。

想到的另一件事是惡意上傳的圖像可能會掛起瀏覽器進程,這是對客戶端的拒絕服務。 您應該能夠避免這種情況。 (當然,用戶為自己上傳了它,但可能不知道她上傳的是什么,從其他人那里收到它 - 在您的場景中可能有效,也可能無效。)

在處理過程中,部分圖像信息可能用於查詢事物,例如從 exif 信息中查找相機供應商或其他任何內容。 此類查詢也可能容易受到注入,從而導致通過惡意圖像偽造查詢。 因此,您在處理期間從文件中讀取的任何內容通常都應該被視為不受信任,就像在服務器上完成的一樣。

客戶端永遠不會安全。 即使您在input type="file"使用accept屬性,它也只會識別打開的對話框以識別給定的類型並僅顯示它們。 但是用戶仍然可以在那里Select All選選項並選擇任何類型的文件。 reader.readAsText(file); 將按原樣讀取它並且不會驗證。 這意味着黑客可以上傳任何想要的東西並可以注入應用程序。 因此,始終考慮通過服務器端語言進行驗證。

然后制作修改版

這沒有任何意義,因為應用程序可以上傳任何內容而不是指定的文件類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM