1. Reflected XSS
Reflected XSS signifie que l'application obtient des données non fiables via des requêtes Web et les transmet aux utilisateurs Web sans vérifier si les données contiennent du code malveillant. Reflected XSS est généralement construit par des attaquants avec des URL contenant des paramètres de code malveillant. Lorsque l'adresse URL est ouverte, les paramètres de code malveillant uniques sont analysés et exécutés par HTML. Il se caractérise par la non-persistance et oblige l'utilisateur à cliquer sur un lien avec. paramètres spécifiques. L'éditeur prend comme exemple le code source du langage JAVA pour analyser CWE ID 80 : Mauvaise neutralisation des balises HTML liées au script dans une page Web (XSS de base)
2. code, le serveur reçoit les données et les traite, puis envoie les données avec le code XSS au navigateur. Une fois que le navigateur analyse les données avec le code XSS, cela provoque une vulnérabilité XSS, qui peut conduire au vol de la cible. les données du site Web. Les cookies sont transférés au serveur de l'attaquant pour lire les informations non divulguées de l'utilisateur ou détourner les clics pour mettre en œuvre des attaques de phishing, etc. De janvier à novembre 2018, il y avait un total de 126 informations de vulnérabilité associées dans CVE. Certaines des vulnérabilités sont les suivantes :
CVEVulnerability Overview |
|
CVE-2018-19091
tianti est un système CMS léger et gratuit écrit en Java et fournit actuellement Un total solution allant de la gestion back-end à l’affichage front-end. Parmi eux, tianti 2.3 présente une vulnérabilité XSS reflétée dans le module de gestion des utilisateurs via le paramètre tianti-module-admin / user /list userName. |
| CVE-2018-14929
Matera Banco 1.0.0 est vulnérable à plusieurs XSS réfléchis, comme le démontre le paramètre d'URL /contingency/web/index.jsp (alias page d'accueil). |
| CVE-2018-12996
ZohoManageEngine Applications Manager fournit des solutions pour surveiller et gérer les structures sous-jacentes J2EE et les applications J2EE. Une vulnérabilité de script intersite (XSS) reflétée dans Zoho ManageEngine Applications Manager 13 (Build13800) permet aux attaquants distants d'injecter un script Web ou du HTML arbitraire via le paramètre « méthode » dans GraphicalView.do. |
| CVE-2018-12090
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 : 🎜🎜🎜🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!