2009-04-07 35 views
12

tôi đang cố gắng để bảo đảm ứng dụng ASP cổ điển của tôi từ XSS. Tôi đi qua AntiXSS từ Microsoft trên mạng và tôi đã tự hỏi nếu điều này sẽ làm việc với một ứng dụng cổ điển?Chống XSS và Classic ASP

Nếu không làm bạn có bất kỳ ý tưởng làm thế nào tôi có thể đi về vệ sinh các dây?

Trả lời

13

Để khử trùng chuỗi Tôi sẽ HTML mã hóa tất cả các đầu ra, như vậy bạn không cần phải Dink xung quanh với ký tự đặc biệt hoặc biểu thức regex lớn

Server.HTMLEncode(string) 

Hai biện pháp đối phó quan trọng nhất để ngăn chặn các cuộc tấn công cross-site scripting là:

  • Đầu vào hạn chế.
  • Mã hóa đầu ra.

qua How To: Prevent Cross-Site Scripting in ASP.NET (i biết asp I'ts không cổ điển nhưng có gốc tương tự)

+0

@Steoates: Đây, ở đây, nói chung là một giải pháp khá phong nha. –

+0

Và nếu bạn có để hiển thị văn bản (hệ thống cũ, thở dài) phong phú, viết một chức năng dọn dẹp để sử dụng nhiều biểu thức thông thường ít nhất là một bước đi đúng hướng. –

+0

Theo OWASP, HTMLEncoding không đủ. Xem: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#Why_Can.27t_I_Just_HTML_Entity_Encode_Untrusted_Data.3F – blischalk

0

Không dễ dàng - bạn cần để thực hiện một wrapper COM-callable, cài đặt trên các máy chủ, vv Tôi chỉ đơn giản là không nghĩ rằng đó là một sự phù hợp phù hợp cho "cổ điển" ASP.

1

Nếu bạn phải cho phép các thẻ HTML nào đó (như tôi làm trong dự án hiện tại của tôi), bạn có thể sử dụng một regex để chỉ cho phép những thẻ và không có người nào khác, như vậy:

set objRegExp = new RegExp 
with objRegExp 
    .Pattern = "<^((b)|(i)|(em)|(strong)|(br))>.*</.*>" 
    .IgnoreCase = varIgnoreCase 
    .Global = True 
end with 
cleanString = objRegExp.replace(originalString, "") 
0
<% 
Response.AddHeader "X-XSS-Protection", "1" 
%> 
Các vấn đề liên quan