📅  最后修改于: 2020-12-04 05:19:56             🧑  作者: Mango
每当应用程序获取不受信任的数据并将其未经验证发送到客户端(浏览器)时,就会发生跨站点脚本(XSS)。这使攻击者能够在受害者的浏览器中执行恶意脚本,这可能导致用户会话被劫持,破坏网站或将用户重定向到恶意网站。
让我们借助简单的图表了解此漏洞的威胁代理,攻击媒介,安全漏洞,技术影响和业务影响。
存储的XSS-当用户输入存储在目标服务器(例如数据库/消息论坛/评论字段等)上时,就会发生存储的XSS,也称为持久XSS。然后,受害者可以从Web应用程序中检索存储的数据。
反射XSS-反射XSS也称为非持久XSS,发生在Web应用程序立即在错误消息/搜索结果或用户提供的输入(作为请求的一部分)中返回用户输入,而没有永久存储用户提供的数据时。
基于DOM的XSS-当数据源位于DOM中,接收器也位于DOM中且数据流永不离开浏览器时,基于DOM的XSS是XSS的一种形式。
该应用程序在未经验证的情况下在构造中使用不受信任的数据。特殊字符应转义。
http://www.webpage.org/task/Rule1?query=try
攻击者在其浏览器中将查询参数修改为-
http://www.webpage.org/task/Rule1?query=Hello from XSS"
步骤1-登录到Webgoat并导航到跨站点脚本(XSS)部分。让我们执行存储的跨站点脚本(XSS)攻击。以下是方案的快照。
步骤2-根据场景,让我们以场景本身提到的密码“ tom”作为Tom登录。点击“查看个人资料”并进入编辑模式。由于tom是攻击者,因此让我们将Java脚本注入这些编辑框中。
步骤3-更新结束后,Tom会收到一个警告框,其中显示消息“ hacked”,这表示该应用程序容易受到攻击。
步骤4-现在根据场景,我们需要以jerry(HR)身份登录,并检查jerry是否受注入的脚本影响。
步骤5-以Jerry身份登录后,选择“ Tom”并单击“查看个人资料”,如下所示。
从杰里的帐户查看汤姆的个人资料时,他能够获得相同的消息框。
步骤6-此消息框仅是示例,但实际的攻击者所能执行的不仅仅是显示消息框。
开发人员必须确保根据HTML上下文(例如正文,属性,JavaScript,CSS或放置数据的URL)转义所有不受信任的数据。
对于那些需要特殊字符作为输入的应用程序,在接受它们作为有效输入之前,应该有可靠的验证机制。