簡體   English   中英

如何創建無法訪問數據的Web應用程序?

[英]How do I create a web application where I do not have access to the data?

前提 :即將開展的項目的要求包括除了授權用戶之外沒有人可以訪問某些數據。 這通常很好,但這種情況並不常見。 這些要求規定,即使程序員或任何其他IT員工也無法訪問此信息。 (他們希望我存儲它而不能看到它。)

在我提出的所有場景中,我總能找到一種訪問數據的方法。 讓我來介紹其中一些。

方案I:限制實時數據庫上的表,以便只有SQL Admin才能直接訪問它。
黑客1:我推出了一項更改,將數據發送到另一個表以供日后查看。 此外,SQL管理員可以查看數據,這打破了要求。

方案II:加密數據,以便需要密碼才能解密。 該密碼僅供用戶知道。 每次創建新記錄時以及每次檢索舊記錄中的數據時都需要它。 加密/解密將在JavaScript中發生,因此密碼永遠不會被發送到服務器,在那里它可以被記錄或嗅探。
Hack II:推出一個更改,記錄javascript中的按鍵並將它們發回服務器,以便我可以檢索密碼。 或者,推出一個簡單地將未加密數據存儲在隱藏字段中的更改,該字段可以發布到服務器以供以后查看。

場景III:與場景II相同,除了加密/解密發生在我們無法控制的網站上。 這個神奇的網站將允許用戶輸入密碼和加密或純文本數據,然后使用javascript來解密或加密該數據。 然后,用戶可以只復制加密文本並將其放入字段中以獲取新記錄。 他們還必須使用此站點查看舊記錄的純文本。
Hack III:除了在他們的系統上安裝一個完整的密鑰記錄器,我不知道如何打破這個。

因此,場景III看起來很有前途,但對用戶來說這很麻煩。 還有其他可能性我可以忽略嗎?

如果您可以在頁面上使用javascript,那么我認為您無法做任何事情。 如果您可以在瀏覽器中看到它,那么這意味着它在DOM中,這意味着您可以編寫腳本來獲取它並在解密后將其發送給您。

這些問題通常不是通過控件來解決的:

  1. 所有程序員都需要一定程度的許可和背景調查
  2. 他們接受過培訓,了解推出用於訪問數據的代碼是一種可以攻擊或更糟糕的攻擊
  3. 某些領域的每一次變化都需要某種簽收

例如 - 沒有簽收的頁面上沒有JavaScript。

如果你被允許添加你想要的任何代碼,那么總有一種方法,IMO。

要求客戶提供保密協議,您可以簽名,簽名,然后查看您想要的數據。

我想知道的是,無論如何,你究竟能用加密數據什么? 幾乎所有應用程序都要求您對數據進行一些過濾,無論是將數據移動到所需位置,修改它,消毒還是顯示它。 否則,你只是一個美化的管道,你不需要做任何工作。

我能想到你不會在哪里查看數據或用它做任何事情的唯一方法是使用CRUD選項進行表格映射的簡單形式。 如果您知道數據將以何種格式進入,因為您應該能夠使用RoR(一個簡單的皮膚)將某些內容卷起來,將SSL放入混合中並將其滾出。 使用相同格式的虛擬數據進行測試,然后進行設置。

事實上,您的客戶是否無法提供虛擬數據進行測試? 如果他們可以,那么你的生活很簡單,因為你所做的就是提供一個“可安裝”並告訴他們如何編輯配置文件。

我認為你仍然可以通過以下方式創建應用程序:

  1. 創建一個dev數據庫並為其設置用戶。
  2. 詢問他們:需要在屏幕上顯示的每個字段的數據類型,大小和名稱。
  3. 設置屏幕,在數據庫中創建接受其指定的數據類型和大小的列。
  4. 將應用程序部署到生產環境,連接到空數據庫。 讓有權限的人(不是您)進入並在數據庫用戶上設置密碼,並在Web應用程序中設置DB用戶的密碼。
  5. 然后,授權用戶可以隨心所欲地執行任何操作,並且您從未看到任何數據。

當然,維護應用程序和調試將是一個婊子!

- 回答評論:

  1. 好的,所以在數據庫和Web應用程序的配置中設置用戶名的密碼后,編寫一個連接到數據庫的程序,設置一個隨機密碼,然后將相同的隨機密碼寫入Web配置。

  2. 除了一組授權工作站之外,防止來自機器的任何傳出數據包 - 因此您無法安裝間諜軟件。

  3. 然后將兩台服務器上的管理員密碼設置為相同的隨機密碼,然后刪除服務器上的所有其他用戶,刪除程序並刪除程序源代碼。

  4. 使用DOD算法擦除開發人員機器的硬盤驅動器,然后將它們扔進工業粉碎機。

10.如果服務器需要調試,請將其丟入垃圾箱,購買一個新的,然后從#1開始。

但嚴重的是 - 這是一個無法解決的問題。 對此的最佳答案是:

告訴他們他們沒有申請。 把你的東西寫在紙上。 把它放在一個文件夾中。 將其鎖在保險庫中。 推,重復一遍。

方案3不會將所有數據暴露給魔術網站嗎? 這聽起來不像是一個可解決的問題(至少我想不出解決方案)。

使用最容易實現的解決方案,我認為要求顯示客戶端不了解軟件開發,因此應該很容易出售您采取的任何方法。

我不得不說我真的不喜歡在客戶端使用JavaScript來解密數據的想法。 這是一個巨大的漏洞,因為任何腳本(黑客,GreaseMonkey,IE7Pro等)都可以訪問DOM並從頁面中獲取數據。

此外,很難解決鍵擊記錄器的問題。 如果你把它們扔進混合物中,那么你的選擇是有限的。 此時,您需要一個安全FOB,如RSA(通常與公司VPN一起使用),以生成真正隨機的PIN。 這可能是昂貴的,這是一個痛苦,我只看到它與VPN一起使用,但我認為它也適用於網站。

至於網站,我堅持使用HTTPS並找到一種通過WebServer加密/解密的方法,而不是依賴JavaScript。 SSL流量不太容易嗅探(非常難以解密),因此允許加密和解密發生在服務器端(IMHO)更安全。

以銀行業場景和其他金融機構為起點,然后從那里開始。 如果可能的話盡量不要過於復雜。

只要您可以訪問其所在的服務器,就無法保證不會侵入數據。 因此,告訴雇主他們必須在其他地方托管數據,並通過安全的HTTPS連接授予訪問客戶端瀏覽器的權限。

您可以設計網頁以安全地動態加載XML數據流,並使用客戶端上的XSLT腳本將其格式化為網頁。

有關示例,請參見http://www.w3schools.com/xsl/xsl_client.asp

這樣就可以生成代碼,但是您永遠無法訪問數據。 只有用戶才能訪問自己的數據。

至於雇主如何在不授權任何IT人員訪問數據的情況下托管數據,那就是他們的問題。 這是一個愚蠢的要求。

我想我會告訴他們,他們要么必須相信我們中的幾個人才能訪問(而不是看它),否則他們就不會得到一個項目。

謝謝你的回答。 如果你有它們,請隨意發表更多想法。

您永遠不會有100%的安全性,額外的安全性需要以速度/價格/便利性等為代價。

假設您采用方案3 - 您的程序員之一可以使用社交工程從其中一個用戶獲取密碼。 再見安全。

如果人們可以在它周圍走動,那么將高安全性的鐵門作為門是沒有意義的。 只需實現一定程度的安全性。

(他們希望我存儲它而不能看到它。)

嘿,唱片業希望人們能夠聽他們的音樂,但不能復制它。 聽起來他們有時會聚在一起!

他們的想法不會因為DRM不起作用的原因而起作用:信任鏈本身就受到了損害。 加密示例通常使用Alice,Bob和Charlie,其中Alice試圖在沒有Charlie收聽的情況下與Bob通信。使用DRM,信任鏈受到損害,因為Bob和Charlie是同一個人。 根據您的情況,Charlie是編寫Alice和Bob用來進行通信的軟件的人。 有一種隱含的信任,因為如果你不相信查理那么你也不能相信查理的軟件。

這是問題的根源:信任。 如果他們不能信任程序員,游戲就會在開始之前結束。

根據他們的目標確實有很多選擇,但我對他們的偏執,呃,意圖感到困惑:

  • 這是他們希望保持私人或最終用戶數據保持私有的他們 (和最終用戶)數據嗎?
  • 您的 (或任何簽約的)公司是否懷疑?
  • 他們害怕過線窺探嗎?
  • 他們是否害怕通過JavaScript或瀏覽器插件訪問DOM?

他們是否計划分階段部署? 在這種情況下,您使用沒有真實數據的測試/開發服務器,但無法訪問具有真實數據的生產服務器,並且DNS日志記錄和/或防火牆規則會阻止您的所有黑客無法檢測到。

最終,如果數據存儲在數據庫中,那么程序員和數據庫管理員可以通過協同工作獲得它。 期。 但是,良好的審計應該能夠揭示出來。

如果這確實是一項要求,那么防范這種情況的唯一方法就是聘請外部公司在發布軟件之前對代碼進行審計,這將是非常昂貴的。

暫無
暫無

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

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