跨站点脚本(xss)

    技术2024-04-02  106

    自己尝试!

    在此交互式教程中,您可以运行代码,尝试对其进行更改,然后再次运行并查看结果。

    跨站点脚本攻击的最常见技术之一是将恶意代码注入网页。 本简短教程中的代码片段向您展示了如何使用转义序列,以使任何注入的代码都无法运行。

    注意:本教程是Usha Ladkani的developerWorks教程的缩写版,“ 通过对HTML响应进行编码来防止跨站点脚本攻击 ”。 有关更多详细信息,请参见该教程。

    跨站点脚本攻击如何工作

    在跨站点脚本(XSS)攻击中,攻击者将恶意代码注入到合法的网页中,然后该网页运行客户端脚本。 当用户访问受感染的网页时,该脚本将下载到用户的浏览器中。

    假设攻击者将此HTML字符串注入网页:

    <script>alert("You've been attacked!")</script>

    当浏览器加载网页时,它将运行脚本作为呈现页面的一部分。 在这种情况下,脚本将运行,并且用户会看到一个弹出警报,提示“您已受到攻击!”。

    您的辩护:在服务器端Java™应用程序的变量中编码HTML

    为了确保不会将恶意脚本代码注入到您的页面中,最好的防线是在所有变量字符串显示在页面上之前对其进行编码。 编码仅意味着将每个潜在危险的字符转换为HTML实体。

    转义后,上面HTML字符串将如下所示:

    清单1.转义HTML
    &lt;script&gt;alert(&quot;You&apos;ve been attacked!&quot;)&lt;/script&gt;

    轮到你! 尝试更改清单1中的代码

    单击“运行”按原样执行代码。 您应该看到与清单1相同的输出。然后更改变量unescapedText以查看会发生什么。 (请记住,您需要使用反斜杠转义所有双引号: \" )。
    跑 <span>导入java.lang.StringBuilder;</span> <span>导入java.util.HashMap;</span> <span>公共类EscapeUtils {public static void main(String [] args){String unescapedText =“ <script> alert(\”您已受到攻击!\“)</ script>”;</span> <span>System.out.println(escapeHtml(unescapedText));</span> <span>} public static String escapeHtml(String inputString){StringBuilder builder = new StringBuilder();</span> <span>char [] charArray = inputString.toCharArray();</span> <span>for(char nextChar:charArray){字符串entityName = charMap.get((int)nextChar);</span> <span>if(entityName == null){如果(nextChar> 0x7F)builder.append(“&#”).append(Integer.toString(nextChar,10)).append(“;”);</span> <span>否则builder.append(nextChar);</span> <span>} else builder.append(entityName);</span> <span>} return builder.toString();</span> <span>} public static final HashMap <Integer,String> charMap = new HashMap <Integer,String>();</span> <span>静态{charMap.put(34,“&”;);</span> <span>//双引号charMap.put(35,“&#35;”);</span> <span>//井号(没有HTML命名实体)charMap.put(38,“&amp;”);</span> <span>//和号charMap.put(39,“’”);</span> <span>//撇号,也称为单引号charMap.put(60,“&lt;”);</span> <span>//小于charMap.put(62,“&gt;”);</span> <span>// 比...更棒 } }</span>
    显示结果 显示预期结果

    摘要

    跨站点脚本编写仍然是攻击用户计算机的最常用方法之一。 但是,您可以在很大程度上阻止攻击者使用恶意代码感染Web应用程序的能力。 在编写应用程序时,请确保将所有变量输出编码到页面中,然后再将其发送到用户的浏览器。

    还有一件事

    请注意,Java String.toCharArray()方法将破坏包含表情符号和其他特殊字符的字符串。 如果您真的想深入了解此主题,请先阅读Unicode Basic Multilingual Plane上的Wikipedia文章 。


    翻译自: https://www.ibm.com/developerworks/java/library/se-prevent-cross-site-scripting-attacks/index.html

    相关资源:微信小程序源码-合集6.rar
    Processed: 0.014, SQL: 9