題:
單引號過濾是廢話嗎?
Peter Walser
2019-02-04 19:28:37 UTC
view on stackexchange narkive permalink

滲透測試人員發現,我們允許在提交的數據字段中使用單引號,並希望我們應用規則(輸入驗證)以不允許它們使用任何值。

雖然我知道單引號在SQL注入攻擊中很流行,我強烈不同意不應將其作為有效輸入。我主張通過使用準備好的語句(正確引用值)來防止SQL注入,而不是過濾掉看起來像是SQL片段的任何東西。

我的情況:

  • 人名可以包含單引號(例如 O'Reilly
  • 文本字段可以包含單引號(例如我很確定
  • 數字字段可以包含單引號( EUR 1'000'000
  • 以及更多

我還看到了其他一些情況,其中應用SQL注入預防規則是出於最簡單的原因將有效數據丟棄(名稱“ Andreas ”被拒絕,因為它包含一個 AND 純文本字段中的常見單詞被拒絕,因為它們包含關鍵字“ select ”,“ 插入”,“ 更新”或“ ”刪除”)。

安全專業人員對此有何立場?

我們是否應拒絕對單引號實施輸入驗證是出於我說的原因?

評論不作進一步討論;此對話已[移至聊天](https://chat.stackexchange.com/rooms/89472/discussion-on-question-by-peter-walser-is-single-quote-filtering-nosense)。
如果您的測試人員認為阻止用戶提交撇號會以某種方式阻止sql注入攻擊,我會感到擔心。
我同意你的邏輯。我會讓他們嘗試在UAT / QA環境上執行sql注入攻擊。他們還需要了解用戶輸入並不危險,這是因為它的處理方式使其具有潛在的危險。
十二 答案:
Sjoerd
2019-02-04 19:38:54 UTC
view on stackexchange narkive permalink

您應該將輸入驗證實現為縱深防禦方法。因此,輸入驗證不應成為防範SQL注入的主要手段,而應該是準備好的語句。作為一項額外的防禦措施,應限制允許的輸入。

這永遠都不應限制功能。如果有合法的用例在輸入中包含撇號,則應允許使用。因此,您應該在名稱字段,描述,密碼中使用單引號,但在數字字段,用戶名字段,車牌字段中不允許使用單引號。

在所有輸入中均禁止使用單引號是很瘋狂的。這破壞了應用程序的功能,甚至不是針對SQL注入的正確解決方案。

請考慮您誤解了滲透測試公司的可能性。如果這是他們的嚴重建議,那麼這對滲透測試公司會造成嚴重影響,我建議您尋找滲透測試合作夥伴,以幫助適當保護您的軟件,而不是使其無法使用。

評論不作進一步討論;此對話已[移至聊天](https://chat.stackexchange.com/rooms/89356/discussion-on-answer-by-sjoerd-is-single-quote-filtering-nosense)。
+1但是,[密蘇里州的車牌可能帶有撇號。](https://dor.mo.gov/motorv/plates/specialty.php#personalized)數字不應以文本*或*存儲,如果它們是(例如“評論”字段的一部分),OP在文化中顯示了帶有撇號的數字字符串。[假設時要小心。](https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/)
Christoph Burschka
2019-02-05 15:38:36 UTC
view on stackexchange narkive permalink

在註入攻擊的上下文中,這顯然是錯誤的-您的數據庫層正在正確處理字符串還是沒有。由於撇號在名稱和自由文本中都是有效的,因此完全阻止撇號將破壞應用程序,而選擇性地阻止它們將無法解決注入問題。

但是嚴格的輸入驗證 很好按照一般原則進行練習,並且在撇號不是合法值的情況下,過度放任是沒有意義的。您以 EUR 1'000'000 為例,它是一種特定於語言環境的格式(僅瑞士,AFAIK)-但是,允許該格式成為值的一部分毫無意義。如果用戶輸入 1,500 ,您的應用程序應該按原樣存儲嗎?您是否必須確定每次處理時應將其解釋為1.5還是1500?在客戶端處理特定於區域設置的表示,並在內部以規範的形式處理數字值會更有意義。

因此,此處的答案取決於審計是否在抱怨特定字段在有意義的地方,或者建議徹底禁止撇號。如果是前者,那是合理的觀點。如果是後者,則它們很愚蠢,並且可能會盲目地遵循清單。

請注意,在特定於語言環境的格式情況下,最好的答案可能不是不允許它,而是以某種方式解析它並生成沒有它的數字。
@jpmc26數字很容易:用戶提供的數字輸入字符串可以包含整數或十進制數字。對於第一個,只需刪除所有非數字並繼續。對於小數,我通常會*從右到左*尋找第一個點或逗號*,將其餘的放掉,然後將其替換為需要的任何小數分隔符,然後繼續。
@beppe9000甚至更容易使用解析庫。但是,它可能需要是前端才能使用用戶的語言環境。
@jpmc26是的,本地化屬於前端。數據獲取只關心規範化:服務頁面時,可以使用js庫根據用戶的偏好設置字符串格式(無論是存儲在db中還是作為cookie存儲)。
-1
@Guran我的觀點是,您在客戶端上進行表單驗證,然後在服務器上使用中性文化。當您需要以用戶的區域性顯示值時,可以使用js設置其格式。將數字存儲為字符串是錯誤的,恕我直言。
@beppe9000是。儘管如此,任何時候只要您收到字符串格式的數字,除非您了解區域性,否則您就是SOL。
@Guran如果發生這種情況,則意味著有人在繞過表單驗證。因此,要么嘗試將服務器端標準化為中性區域性(根據預期的數字類型和範圍),要么以400錯誤對其進行懲罰。除非您實際上希望數字的痛苦在於字符串,否則您將使用庫,請求標頭,GeoIP和反向DNS來近似語言環境,並且如果一切都失敗了,則會發送錯誤或解析為中立。
Joshua
2019-02-05 04:51:22 UTC
view on stackexchange narkive permalink

步驟1)參數化您的SQL。

步驟2)確保您正在使用SQL DB連接庫設置參數值,不是只是內聯設置。這是針對SQL注入的實際防禦措施。

第3步)不要在SQL中進行查詢構建。

第4步)添加配置開關,將錯誤一直傳播到用戶。

第5步)告訴滲透測試人員找到一種生成帶有單引號奇數或關閉的SQL錯誤的方法。

為第3步+1)。絕對的真理。
DarkMatter
2019-02-04 19:41:52 UTC
view on stackexchange narkive permalink

準備好的語句(參數化查詢)非常棒,只需確保正確實現即可。我見過“準備好的語句”實現,每個實現都一樣脆弱。對於實現細節的討論,我建議堆棧溢出。

縱深防御也沒有錯(在這種情況下為輸入驗證),但做得很好...拒絕所有單引號可能不是最佳實踐:)

評論不作進一步討論;此對話已[轉移為聊天](https://chat.stackexchange.com/rooms/89473/discussion-on-answer-by-darkmatter-is-single-quote-filtering-nosense)。
Schwern
2019-02-09 05:44:27 UTC
view on stackexchange narkive permalink

我不是安全人員。我是一個必須維護安全代碼的程序員。這就是我所說的“脆性”練習。入口點分散在整個典型項目中。找到並清除所有這些錯誤是一項艱鉅的工作,只能解決一個問題,需要進行大量的維護和麻煩工作,以確保在代碼更改時該代碼仍然有效,並且存在使該代碼無效的各種假設。

而是使用更易於維護,分層,上下文化和解決大量問題的實踐。這樣一來,您就不需要昂貴的,過於寬泛的過濾。

如果您不知道輸入將如何使用,就無法保證輸入的安全。

假設您已經通過從所有輸入中去除所有單引號來“保護”系統。太好了,您可以安全地抵禦一種類型的SQL注入攻擊。如果該輸入用於允許雙引號的MySQL查詢...

  • MySQL查詢
  • 文件系統操作
  • Shell命令
  • 網絡查詢
  • 方法名稱
  • 類名稱
  • eval

每個它們具有不同的特殊字符,轉義序列,引用規則和安全性慣例。您可能無法預測輸入內容將如何使用。試圖去除所有特殊字符是瘋狂的,只能“解決”一類攻擊。

或者如果允許用戶使用該怎麼辦?輸入頁數限制。該限制在參數化查詢中應有盡有;沒有SQL注入,是的!用戶輸入 9999999999 ,現在您可以進行DOS攻擊。

您必須在執行可能不安全的操作時應用適當的安全措施。這考慮到了操作所特有的許多因素。清理輸入字符只是一個。

只要您這樣做,還可以對查詢進行參數化。這樣一來,就不再需要做所有的工作,也不必破壞橡皮布的報價。

過濾所有輸入非常困難。

在給定的項目中有很多很多方法來獲取和傳遞輸入:

  • 表單輸入
  • URLs
  • 文件名
  • 文件內容
  • 數據庫查詢
  • 網絡讀取
  • 環境變量

這些通常是非常自由的形式,可以使用許多不同的庫。我不知道有任何靜態分析工具可以驗證所有潛在的易受攻擊的輸入是否已通過過濾。某些語言具有 taint 系統,但是很難有效使用。即使您過濾了所有輸入,如果沒有靜態分析工具,未經過濾的輸入也會隨著開發的進行而洩漏回來。維護結果不完整,成本高昂會影響功能。

相反,通常只有一種方法可以在項目中執行SQL。存在靜態和運行時工具來自動檢測潛在的SQL注入。您甚至可以完全禁止使用字符串,並要求所有查詢均為SQL查詢對象。這些良好做法易於維護,並且越來越多地融入工具和SQL庫中。

“防火牆”導致安全性寬鬆。

類似於某些辦公網絡的做法非常不安全,因為“我們有防火牆”,由於“輸入是安全的”,因此團隊有可能懶於保護代碼安全。輸入的內容絕對是不安全的。

機會成本

有人可能會說“為什麼不同時使用?”您只有這麼多小時來從事項目。低效率,高維護實踐是很麻煩的。實施和維護它會花費您有限的時間來避免更高效,更易於維護的實踐。在最壞的情況下,您將花費大量時間來玩弄輸入漏洞,以及隨後因過於激進的過濾而導致的問題,以致您將永遠沒有時間採取適當的安全措施。

簡而言之,輸入過濾昂貴,洩漏,難以維護,無法解決問題並且可能使情況變得更糟。

Philip Rowlands
2019-02-04 19:38:58 UTC
view on stackexchange narkive permalink

正如您自己說的那樣,如果您使用的是參數化查詢,那麼單引號就不成問題。在這種情況下,您可以拒絕他們的建議。如果這樣做,請強調您使用參數化查詢 的事實,這也有助於提高可用性(使用先前的示例)。

Erik A
2019-02-04 21:20:11 UTC
view on stackexchange narkive permalink

如果您100%確保始終在所有地方防止SQL注入,那確實是胡說八道。

但是,SQL注入是最常見的安全風險之一,即使您確定自己如果正確編寫了您的應用程序以使用參數,那麼草率的DBA可能會執行查詢,而該查詢可能會受到二階SQL注入的威脅。它甚至可能不會存儲在任何地方,而可能只是複製表的查詢。

二階攻擊更難以執行,但更難以防範。防範二次攻擊意味著需要檢查在數據庫上運行的具有寫權限的每個動態SQL語句是否存在SQL注入的風險,不僅是處理來自不受信任來源的輸入的SQL語句。

不允許使用引號到處都是對第二級攻擊的草率防護,但確實降低了它們的可能性。在理想的世界中,這不是必須的,但是不幸的是我們並不生活在一個世界中。

如果許多用戶對數據庫具有任何形式的寫訪問權限,並且能夠寫自己的SQL語句,則這可能是明智的安全措施。如果您的應用程序是訪問數據庫的唯一方法,並且只有非常有知識的用戶可以執行具有寫訪問權的查詢,那麼通常就沒有必要。

誠然,我一般並不精通滲透測試或PL / SQL(我認為這是關於)的,但是二階SQL注入似乎確實很可怕。如果我們共同了解到在用戶輸入上使用`eval()`不是一個好主意,那為什麼我們還要在PL / SQL中使用這種構造呢?我希望您的鏈接後面有另一種方法可以做到這一點,即_does_尊重代碼和數據之間的差異。
@tomsmeding在大多數SQL方言中都可以進行二階注入(通過sp_executesql通過T-SQL,通過EXECUTE IMMEDIATE通過PL / SQL,通過EXECUTE通過MySQL)。它們都支持參數,因此您可以正確地進行操作,但是存在局限性。例如,我已經將Access SQL樞紐查詢遷移到T-SQL,並且在T-SQL中執行此操作的唯一方法是使用字符串連接來實現動態字段名稱,就像Access一樣(帶有轉義字符,但是轉義字符是不好的),並且我遇到了沒有它們的示例腳本),因為您不能將參數用於字段名稱。
@tomsmeding:除非情況有所變化,否則沒有任何好方法可以執行“ select * where id is in [list]”形式的東西,而無需使用動態生成的SQL來指定列表。我不會在列表中使用用戶指定的項目嘗試這種操作,但是使用數字數據類型處理數字ID時,我看不到任何注入風險。
@supercat當然可以完成-例如,對於python / postgres,可以通過http://initd.org/psycopg/docs/usage.html#lists-adaptation或http://initd.org/psycopg/docs/完成usage.html#tuples-adaptation,因此有一些驅動程序支持,並且其他語言/數據庫引擎也應該可以使用類似的功能。
@Peteris:是Psycopg庫將數組作為參數傳遞給SQL引擎,還是將其作為需要可變數量的單個參數的命令擴展出來?
@supercat我不能確定是否要比API文檔說的更多地研究psycopg2內部,但是由於數組是本機的postgresql數據類型(https://www.postgresql.org/docs/9.0/arrays.html),因此有可能(因此必須支持)作為任何隨機SELECT中列的值,然後我假設驅動程序必須以適當的形式支持數組交換,而不是一些嚴格的技巧。
PostgreSQL提供了更好的防禦措施,以防止注入到“立即執行”查詢中:一組將正確引用輸入的函數。它們是[`quote_ident`](https://www.postgresql.org/docs/current/functions-string.html#id-1.5.8.9.7.2.2.21.1.1),[`quote_literal`](https://www.postgresql.org/docs/current/functions-string.html#id-1.5.8.9.7.2.2.22.1.1)和[`quote_nullable`](https://www.postgresql.org/docs/current/functions-string.html#id-1.5.8.9.7.2.2.24.1.1)。顯然,最好避免使用“立即執行”,但是如果必須使用它們,它們在清除環境方面會更好。
-1
@supercat您是否會做類似`從usertab中選擇用戶名加入usertab.id = sessiontab.id上的sessiontab,其中sessions.token = 的事情?我想也許是性能,但是無論如何,這樣的完全連接都會被查詢計劃者優化,即使由於某種原因而沒有,您仍然可以通過加入子查詢來強制它。
@IMSoP引用答案中鏈接的示例。我只是使用來表示SQL驅動程序實際操作所需的任何準備好的語句語法。至於用戶提供的“ IN”子句,那並不是我真正想要的。而不是在鏈接的示例中,是二階SQL注入,這似乎主要是由於使用某種複雜的字符串擴展中間查詢而導致的。我不是專家DBA,但對於為什麼您可能首先需要運行容易受到該問題影響的查詢,並不能很好地說明問題。
我曾經這樣做。每個單個用戶字符串都立即被htmlencoded。我現在認為這是一個糟糕的建築選擇。
@AJMansfield好的,我很困惑,因為您的評論是針對“ supercat”的,所以我雖然與他們的“ select * where id is in [list]”示例有關,但與答案(是別人寫的)有關。
@IMSoP哦,糟糕!其實並不是要給任何人加上標籤...
Tobi Nary
2019-02-04 19:38:39 UTC
view on stackexchange narkive permalink

雖然我不知道您的應用程序的詳細信息,但是我會遵循您的說法。

有些字段不需要包含某些字符。在這些字段中,您可以使用輸入驗證來過濾單引號(和雙引號以及其他內容)。

如果轉義無法正常工作,則輸入驗證可能是緩解策略,但是(正確地)使用準備好的語句應該是減輕SQL注入風險的首選方法。

Jason Leaman
2019-02-05 16:14:23 UTC
view on stackexchange narkive permalink

如果這是真正的滲透測試的結果,那麼他們應該能夠為您提供一個值,以證明這是一個可利用的問題。如果他們不能,那麼我建議您要求進行適當的滲透測試,以證明它們可以被利用。

但是,如果這是通用漏洞掃描的結果,那麼我會期望像這樣的模糊通用響應,只會標記能夠插入單引號。在這種情況下,如果您對沒有問題感到高興,那麼您可以很高興地忽略該結果。

這個答案實際上並沒有解決這個問題。問題不在於測試方法,而是如何過濾。請確保您的答案直接解決了該問題。我們喜歡不同的觀點和信息,但這似乎是切線。
-1
@schroeder問題是“對於滲透測試該報告我該怎麼辦?”這個答案是“檢查它是否是真正的漏洞,否則,將其視為誤報”。我不確定為什麼會切線。
@IMSoP根本不是問題,這是問題的元抽象。如果這實際上是問題,則OP會自行回答(OP會概述此答案)。
@Joshua OP專門以非常詳細的方式對框架進行了挑戰,因此,我不確定這種煩惱會帶來什麼。
-1
@scheoeder:這幾乎是其他答案的重複,但即使是唯一的答案也很糟糕,才應使用NAA。
但是在這種情況下,需要大量的答案來證明測試者是錯誤的。
@IMSoP您引用的2條語句之間沒有任何關聯
@schroeder我不確定它們之間可能有多少關聯。“我們應該X嗎?”“如果是,則為是”。
MrNiceGuy
2019-02-04 21:27:11 UTC
view on stackexchange narkive permalink

從一位前Web開發人員到我自己的筆測試儀,我不想限制用戶的輸入,但這可能是一個主要問題。我知道我自己就是使用這種技術來破壞Web應用程序和數據庫的。對輸入進行迭代以確保其格式正確。

撇號可以是有效輸入,但也可以避免傳遞數據庫語句並引入攻擊向量。 DB和Web語言具有可以處理這些類型實例的模塊,但是編寫自己的模塊進行仔細檢查仍然是一個好主意。

OP已正確地對所有參數進行了參數化,因此轉義字符不應在任何地方使用。此外,即使正確實施排序,[它們也不一定總是提供安全性](https://stackoverflow.com/a/12118602/7296893)。
同意,根據您使用的堆棧和框架,進行其他完整性檢查可能會很有用。就我而言,我在帶有DataParameters的JPQL查詢的Spring Data JPA上使用Java / JDBC和Prepared語句。
ANone
2019-02-12 20:05:06 UTC
view on stackexchange narkive permalink

我認為這是一個觀點問題。您的系統具有應首先滿足的功能要求。這並不意味著不值得考慮輸入驗證的問題。順便說一句,兩者並不直接矛盾。我不建議這樣做,但是可以在前端進行編碼和解碼,並讓SQL存儲和查詢使用編碼形式。

平衡是主觀的,取決於許多事情沒有提到。您可以嘗試讓他們澄清。他們可能有很好的理由,但可能沒有。

Dewi Morgan
2019-02-05 09:22:48 UTC
view on stackexchange narkive permalink

我將與大多數其他當前答案相矛盾。

您的滲透測試者幾乎可以肯定100%是正確的。

我的假設:沒有值得花費的五分錢他們的鹽會報告此情況,除非他們發現您的應用程序在沒有撇號有效的情況下接受並回傳了撇號。

也許您的用戶名,電話號碼,域名和日期都應具有特定格式和字符範圍。所有人都應該沒有撇號。但是,相反,對於所有這些字段,您只接受它們給您的任何舊字符串。

如果此假設為假,並且您已經盡可能嚴格地驗證輸入,則

如果這個假設是正確的,並且撇號在該輸入中無效,那麼:

  • 是,您應該直接拒絕無效輸入。
  • 您應該允許他人使用損壞的數據污染數據庫。
  • 您應該不要嘗試在顯示時清理數據,這要比嘗試清理 <script> 的嘗試多,因為攻擊者只會找到一種利用清理的方法算法,例如 <script > <scr<script>ipt> + ADw-script + AD4-或其他任何方法。
  • 有例外,但應將其明確定義為s
  • 除非您的要求明確處理帶撇號的瑞士地區貨幣,否則您的示例“ 1'000'000”不再是“ 1〜000〜000”或“ 1ba​​nana000apple000”。拒絕它。不要試圖清除“ 1'000”,您不知道它們是指1,000還是1.000或14000,還是一個英尺或一個學位或完全不同的東西。

查詢參數化僅避免大多數 SQL注入類:並非所有可能的無效數據濫用。

但是所有其他系統呢?依靠符合公司標準的用戶名?您剛剛破壞了它們。

  • 用戶是否有主目錄?
  • 他們的名字會被記錄在任何地方嗎?
  • 他們曾經被顯示嗎?
  • 用戶名是否曾經在系統的命令參數中使用?
  • 他們曾經發送過AJAX或XML數據嗎?
  • 是否存在對一批用戶名運行的批處理模式操作,例如名稱以A到M開頭,N通過Z接下來,第三天的0-9,然後重複?這些批次永遠不會對您的用戶'-_ haxxor _-'不利。
  • 在某些情況下,冒充其他用戶對某人有害或有用,所以您希望他們都有唯一的名字?但是他們可以通過註冊JohnͿοոЈоհ或like來冒充用戶John。
  • 所有使用名稱的系統都不能拒絕您提供的值。處理無效的輸入,嘗試清除或轉義它們,即使我們已經表明這是不安全的並且注定要失敗。但是,由於該用戶已經註銷很久了,因此他們不會看到任何要求輸入新電子郵件地址的錯誤。
  • 您的DBA現在在他的數據庫中有廢話。這不僅使他在日常工作中,而且在他不得不遷移數據時,都會給他帶來很多痛苦,因為目標系統中任何更嚴格的約束都會破壞舊數據。
  • 您的同事您的數據的其他使用者現在必須驗證他們從數據庫讀取的所有內容,因為他們甚至不相信您已經執行了完全記錄的標準。
  • 您的用戶現在使用的是不太安全的系統。
  • 您現在必須對所有這些輸入進行重新處理,以確保不再將廢話添加到數據庫中。

查詢參數化不是正確清理輸入的替代方法。

讓我們[繼續聊天中的討論](https://chat.stackexchange.com/rooms/89352/discussion-between-dewi-morgan-and-lightness-races-in-orbit)。
看來我的評論已在大規模清理中被刪除,因此對於那些不清楚為什麼這個答案越來越不贊成的人,我將重申:**清除輸入並不能替代正確處理輸出數據**。在此答案給出的示例中,只有模擬情況才可以在僅輸入時實施。可以僅**通過轉義或過濾正在處理的數據**來正確處理其他每個**。輸入驗證對於向用戶提供反饋很有用,但是只有在其他地方做錯了時,它才會提高安全性。
-1
查詢參數化*加上等效項,無論您在何處使用數據*,**都是清理輸入的替代方法;的確,如果您的目標是安全性,那麼它是“高級替代品”。說“您的用戶名一定不能包含撇號”可能會讓您感到放心,但是對攻擊者說的就是“他們必須在某個地方的原始查詢中使用此名稱,我應該找到一種方法誘騙他們創建帶有用戶名的用戶。撇號”。除非您可以100%確保您的驗證能夠解決所有問題,並且無法繞過它,否則您必須在使用時防範不良數據。
從根本上講,將輸入清理作為安全措施的問題在於不存在“安全數據”之類的東西。安全性取決於您使用它的上下文。由於您無法預測數據生命週期中將要擁有的所有可能的上下文,因此可以通過將每個字段限制為A-Z,a-z,0-9來限制功能和可用性。或者,您也可以將清理工作視為一種不完整的措施,並在遇到每種情況時將其寫入“真實”安全性作為後盾。
@IMSoP:驗證,參數化和輸出轉義是用戶輸入安全性的三個正交軸。缺少任何一個都是安全漏洞。緩衝區溢出,整數溢出,我描述的cron批處理範圍問題以及無數的任意代碼執行攻擊都可以通過正確的多層驗證來緩解,但完全不受其他兩個軸的影響。
我看不到範圍批處理問題將如何“不受其他兩個軸的影響”。**如果**,您知道您可以100%相信所有輸入都是字母數字,那麼所描述的算法是可以接受的;但是在極不可能的情況下,您需要添加一個警告操作員的斷言或“及其他”子句。因此,最安全的解決方案是最接近處理的解決方案,而不是十年前信任某些輸入形式的可預測方案。
如果我可以的話,結果是否為-1?“沒有一個戊酯值得他們的鹽嗎……”問題的全部不是要確定戊酯是否值得他們的鹽嗎?“彭斯特說X,對嗎?”假設pentester實際上沒有說“ X”完全忽略了重點。
“如果您能強調您錯誤地認為我說過“消毒輸入可以代替正確處理輸出”,”,這句話是:“但是所有其他依賴用戶名符合公司標準的系統呢?你把它們弄壞了。”具體說來,使用此應用程序輸入的系統將中斷,因為此應用程序未清除。(另一種選擇是,如果進行消毒,它們也不會破壞。)這裡的強烈暗示是,衛生是唯一的防禦層。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...