LAMS ist eine neue Generation JAVA-basierter Lernsoftware, die gemeinsam von der Macquarie University in Australien, LAMS International Ltd. und der LAMS Foundation entwickelt wurde. Nicht authentifiziertes reflektiertes Cross-Site-Scripting (XSS) gibt es in LAMS vor 3.1, wodurch Remote-Angreifer in „forgetPasswordChange.jsp“ zugelassen werden. Einführung von beliebigem JavaScript durch Manipulation nicht spezifizierter GET-Parameter während der Änderung von Schlüssel = Passwort. |
|
3. Beispielcode
Das Beispiel stammt aus der Samate Juliet Test Suite für Java v1.3 (https://samate.nist.gov/SARD/testsuite.php), Quelldateiname: CWE80_XSS__CWE182_Servlet_URLConnection_03.java. 3.1 defekter Code -in-text Prettyprinted">urlConnection-Objektantwortinhalt, lesen Sie eine Datenzeile aus dem Pufferstrom in Zeile 52 und entfernen Sie den gesamten <script></script>
-Tag hinzufügen und die verarbeiteten Daten auf der Seite ausgeben, auch wenn das <script></script>
-Tag gefiltert wird , aber es können immer noch andere html
-Tags verwendet werden, bei denen eine böswillige URL
verwendet wird erstellt wird. Wenn die Website jedoch nicht geschützt ist, liest die Seite den Inhalt von document.cookie
und gibt ihn in die Seite ein. Dadurch wird reflektiertes XSS erstellt.
Verwenden Sie 360 Code Guard, um den obigen Beispielcode zu erkennen. Sie können den Fehler „reflektiertes XSS“ erkennen und die Anzeigeebene ist hoch. Die Quelle der Datenverschmutzung und die Datenflussrichtung können anhand des Tracking-Pfads analysiert werden, und der Fehler wird in Zeile 100 des Codes gemeldet, wie in Abbildung 1 dargestellt: Abbildung 1: Beispiel für die Erkennung von reflektiertem XSS
3.2 Reparaturcode
urlConnection
对象响应的内容,在第52行从缓冲流中读取一行数据,在第100行中,将获得的数据去除所有的<script></script>
标签并向页面输出处理后的数据,即使过滤了<script></script>
标签,但仍然可以使用其他html
标签,在这里构造了恶意的url
,但网站未做防护时,页面会读取到document.cookie
的内容并输入到页面。这样就造成了反射型 XSS。
使用360代码卫士对上述示例代码进行检测,可以检出“反射型XSS”缺陷,显示等级为高。从跟踪路径中可以分析出数据的污染源以及数据流向,在代码行第100行报出缺陷,如图1所示:
图1:反射型 XSS 检测示例
3.2 修复代码
在上述修复代码中,由于页面输出的内容为用户的年龄,在第96行,对响应的内容转换为数字,这样就过滤了其它 html 的字符,即使存在字符,代码会报出异常,并不会造成反射型 XSS 的发生。
使用360代码卫士对修复后的代码进行检测,可以看到已不存在“反射型XSS”缺陷。如图2:
图2:修复后检测结果
4 、如何避免反射型 XSS
要避免反射型 XSS,需要注意以下几点:
(1) 对用户的输入进行合理验证(如年龄只能是数字),对特殊字符(如 、'、"等)以及<script></script>
、javascript
等进行过滤。
(2) 根据数据将要置于 HTML 上下文中的不同位置(HTML 标签、HTML 属性、JavaScript 脚本、CSS、URL),对所有不可信数据进行恰当的输出编码。
(3) 设置HttpOnly
属性,避免攻击者利用XSS
漏洞进行Cookie
劫持攻击。在 JavaEE 中,给Cookie
添加HttpOnly
Im obigen Reparaturcode ist der von der Seite ausgegebene Inhalt der Konvertieren Sie den Antwortinhalt in Zeile 96 des Benutzers in Zahlen und filtern Sie so andere HTML-Zeichen heraus. Selbst wenn Zeichen vorhanden sind, meldet der Code eine Ausnahme und verursacht kein reflektiertes XSS. Verwenden Sie 360 Code Guard, um den reparierten Code zu erkennen, und Sie können sehen, dass kein „reflektierter XSS“-Fehler vorliegt. Wie in Abbildung 2 dargestellt:
🎜
🎜🎜Abbildung 2: Erkennungsergebnisse nach der Reparatur🎜🎜🎜4. So vermeiden Sie reflektierendes XSS🎜🎜🎜Um reflektierendes XSS zu vermeiden, können Sonderzeichen verwendet werden (wie , ', " usw.). .) und <script></script>
, Javascript
usw. zum Filtern. 🎜🎜(2) Entsprechend den verschiedenen Orten, an denen die Daten im HTML-Kontext platziert werden (HTML-Tags, HTML-Attribute, JavaScript-Skripte, CSS, URL), werden alle nicht vertrauenswürdigen Daten ordnungsgemäß codiert ausgegeben 🎜🎜(3) Festlegen Das Attribut HttpOnly
soll verhindern, dass Angreifer die Sicherheitslücke XSS
nutzen code class="prettyprint code-in-text Prettyprinted">Cookie-Hijacking-Angriffe Geben Sie in JavaEE Cookie
den Code zum Hinzufügen von HttpOnly
lautet wie folgt: 🎜🎜🎜🎜