簡體   English   中英

防止 XSS 攻擊但仍然顯示單引號

[英]Prevent XSS attacks but still display single quotes for instance

我想確保一些輸入。

例如,一個自由的文本區域,用戶可以在其中寫一些句子。

在服務器端,我 HTML & javascript 編碼:

_htmlEncoder.Encode(_javascriptEncoder.Encode(input))

但我努力讓用戶無痛。 例如,如果我輸入以下法語文本:

C'est une phrase importante pour moi。

編碼后,我將得到:

C'est une phrase importante pour moi。

單引號被編碼。 顯然,我之前可以對其進行解碼,但這會使它容易受到 XSS 攻擊。

我一定錯過了一些明顯的東西。 我有什么選擇?

如果編碼過多,就會發生這種情況。

您需要准確使用所需的編碼量,不能多也不能少。 例如,如果您的輸入沒有在 JavaScript 中逐字使用,那么 JavaScript 編碼就沒有意義。 沒有makeMyStringSecure(...)方法可以神奇地防止 XSS。 您需要了解每個字符串的使用位置和使用方式,並根據特定情況的要求對其進行准確編碼。

[來自評論的后續問題:]所以在這種情況下,我在 2 個不同的地方使用輸入:普通 UI [和] 在 email 中。這意味着我應該在使用它之前編碼,而不是在數據庫級別? (對於 XSS 我的意思是,對於 sql 注入,我當然會)

確切地說,數據庫應該包含原始的、未編碼的值:並且您可以根據需要對其進行編碼,如果您通過 JSON 發送它,則為 JSON 編碼,如果您通過 XML 發送它,則為 XML 編碼,HTML 編碼用於 88389d-8508 頁面 Quoterintable6,電子郵件。 ETC...

理想情況下,編碼由 (UI) 庫代碼完成,而不是由業務邏輯完成。 所有需要手動完成的事情都容易出錯。 同樣,應該不需要 SQL 編碼你的字符串:使用參數化查詢,庫會處理它!

暫無
暫無

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

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