代码之家  ›  专栏  ›  技术社区  ›  Klaas van Schelven

XSS作为攻击向量,即使没有存储XSS数据?

  •  1
  • Klaas van Schelven  · 技术社区  · 15 年前

    我有一个关于XSS的问题

    表单是否可以用作XSS的向量,即使数据没有存储在数据库中并在以后使用?

    也就是说,在PHP中,代码如下:

    <form input="text" value="<?= @$_POST['my_field'] ?>" name='my_field'>
    

    在您自己的浏览器上显示一个警告框(演示JS可以运行)对于上面的代码来说是微不足道的。但这是否也可以跨浏览器使用? 我看到的唯一场景是,你欺骗某人访问某个页面,即CSRF和XSS的组合。

    “存储在数据库中,稍后再使用”:我了解的关于CSS的场景是,您可以将数据发布到运行javascript的站点,并显示在浏览器中的页面上,该页面具有比您自己更大/不同的权限。 但是,很明显,这是 我说的是上面。

    4 回复  |  直到 15 年前
        1
  •  1
  •   Noon Silk    15 年前

    是的,它仍然是一个攻击向量。

    你需要考虑的是:

    是否可以欺骗经过身份验证的用户使用恶意制作的数据查看此页面?

    答案是这种情况是“是”(假设您已经验证了用户)。因为有可能将某人引导到您的站点并将恶意变量传递到该字段。

        2
  •  1
  •   Mike    15 年前

    是的,它仍然是一个攻击向量,尽管影响更具情境性。

    这里有一个人为设计的场景,如果表单需要身份验证才能到达,那么它将扩展到以前的答案(如果站点不关心表单是通过POST还是GET提交的,则更简单):

    1)攻击者使用CSRF使用攻击者的凭据(例如<iframe-src)登录受害者= http://../login?id=...&pass= …“></iframe>)。这样,攻击者就可以将表单带给受害者,而受害者是否没有帐户并不重要。
    2)攻击者使用另一个CSRF对表单执行XSS,要求受害者提供一些凭证等(这是需要发生令人信服的社会工程的地方,或者攻击者有一些有用的javascript在浏览器的同一来源中用于站点)。

    另一种人为的情况是,易受攻击的表单执行一些重要操作,如在帐户之间转移资金:

    0)易受攻击的表单使用具有随机值的隐藏表单字段来防止CSRF。攻击者不知道值是什么,无法设置正确的攻击。
    1)攻击者创建一个包含javascript的CSRF有效负载来读取表单的随机CSRF令牌(即从浏览器的DOM中提取它们)。
    2)受害者登录现场。
    3)攻击者引诱受害者使用CSRF有效负载,CSRF使用正确的CSRF令牌引导表单请求,因为它在受害者的浏览器中、在受害者站点的同一源中以及使用受害者的身份验证会话执行。攻击者不需要知道CSRF令牌,只需要能够操作存储它们的表单字段。 4)攻击者从让受害者提交表单中获益——除了引诱受害者进入CSRF有效载荷之外,不需要弹出窗口或进行社会工程,但是表单需要为攻击者做一些“有用”的事情。

        3
  •  0
  •   nonopolarity    15 年前

    我认为您的意思是,因为用户2不能显示用户1添加的以前的数据,所以XSS会发生吗?因此,如果用户1对URL进行黑客攻击,使一些$\u get参数也显示在网页上(然后甚至将其更改为tinyurl),并传播此URL,表示确实值得查看此页面等,那么可能是可行的。

    因此,在显示页面时最好还是转义所有参数。

        4
  •  0
  •   PopularIsn'tRight    15 年前

    这绝对是一种有效的XSS形式。XSS有两种形式——存储和反射。反射更为常见,但存储具有更具破坏性的潜力。反射XSS通常被用作社会工程攻击的一部分。攻击者创建的URL如下: http://host.com/page.php?my_field=malicious_code 他们通常会用tinyutl或bit.ly来缩短网址,然后用通常的社会工程方法(电子邮件、留言板、twitter、被劫持的facebook帐户等)将其删除。

    推荐文章