LAMS est une nouvelle génération de logiciels d'apprentissage basés sur JAVA développés conjointement par l'Université Macquarie en Australie, LAMS International Ltd. et la Fondation LAMS. Des scripts inter-site reflétés (XSS) non authentifiés existent dans LAMS avant 3.1, permettant aux attaquants distants dans ForgetPasswordChange.jsp? Introduction de JavaScript arbitraire via la manipulation de paramètres GET non spécifiés lors du changement de clé = mot de passe. |
|
3. Exemple de code
L'exemple provient de Samate Juliet Test Suite pour Java v1.3 (https://samate.nist.gov/SARD/testsuite.php), nom du fichier source : CWE80_XSS__CWE182_Servlet_URLConnection_03.java.
3.1 code défectueux
L'exemple d'opération de code ci-dessus consiste à obtenir l'âge de l'utilisateur, à créer un objet de connexion à la ligne 40 et à créer un flux d'entrée à la ligne 44 pour obtenir urlConnection
contenu de la réponse de l'objet, lisez une ligne de données du flux tampon à la ligne 52 et supprimez tous les <script></script>
et afficher les données traitées sur la page, même si la balise <script></script>
est filtrée , mais toujours d'autres balises html
peuvent être utilisées, où une url
malveillante est construit, cependant, lorsque le site Web n'est pas protégé, la page lira le contenu de document.cookie
et le saisira dans la page. Cela crée du XSS réfléchi. 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
Utilisez 360 Code Guard pour détecter l'exemple de code ci-dessus, vous pouvez détecter le défaut "XSS réfléchi" et le niveau d'affichage est élevé. La source de pollution des données et la direction du flux de données peuvent être analysées à partir du chemin de suivi, et le défaut est signalé à la ligne 100 du code, comme le montre la figure 1 : Figure 1 : Exemple de détection du XSS réfléchi
🎜🎜3.2 Code de réparation🎜🎜🎜🎜🎜Dans le code de réparation ci-dessus, puisque le contenu généré par la page est le L'âge de l'utilisateur, à la ligne de la page 96, convertit le contenu de la réponse en nombres, filtrant ainsi les autres caractères HTML. Même si des caractères existent, le code signalera une exception et ne provoquera pas de réflexion XSS. 🎜🎜Utilisez 360 Code Guard pour détecter le code réparé, et vous pourrez voir qu'il n'y a pas de défaut "XSS réfléchi". Comme le montre la figure 2 : 🎜🎜
🎜🎜Figure 2 : Résultats de détection après réparation🎜🎜🎜4. Comment éviter les XSS réfléchissants🎜🎜🎜Pour éviter les reflets, il peut y avoir un nombre), pour les caractères spéciaux (tels que , ', ", etc. .) et <script></script>
, javascript
etc. pour filtrer. 🎜🎜(2) Selon les différents emplacements où les données seront placées dans le contexte HTML (balises HTML, attributs HTML, scripts JavaScript, CSS, URL), filtrer Toutes les données non fiables sont correctement codées en sortie 🎜🎜(3) Définir. l'attribut HttpOnly
pour empêcher les attaquants d'utiliser les conduites de vulnérabilité XSS
Cookie attaques de piratage. Dans JavaEE, donnez à Cookie
Le code pour ajouter HttpOnly
est le suivant : 🎜🎜🎜🎜