使用内联样式有哪些风险?

2024-05-19

A 内容安全政策 https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP with a default-src or style-src指令将阻止内联样式应用于<style>元素或样式属性。要允许使用内联样式,值为unsafe-inline必须应用于 CSP 获取指令。这似乎表明内联样式是不安全的。

虽然内联 Javascript 是 XSS 攻击的明显攻击媒介(CSP 是几乎没用 https://research.google.com/pubs/pub45542.html with script-src 'unsafe-inline'),Google Web 基础知识考虑内联样式成为相对同等的威胁 https://developers.google.com/web/fundamentals/security/csp/,提供一个例子 http://scarybeastsecurity.blogspot.com/2009/12/generic-cross-browser-cross-domain.html2009 年一篇博客文章中巧妙的数据泄露方法。

另一方面,另一个Web 基础知识文章 https://developers.google.com/web/fundamentals/performance/critical-rendering-path/analyzing-crp#adding_javascript_and_css_into_the_mix建议内联样式可以帮助优化关键渲染路径,因为当浏览器获取外部资源时,第一次绘制不会被阻止。安全性和性能之间似乎存在非常现实的权衡:

一般来说,内联样式的风险有多大?


From an 是否有可能被利用从观点来看,是的,内联样式与内联 JavaScript 一样危险。然而,利用此类漏洞的情况并不常见。

恶意使用 CSS 的方法有很多种,最常见的方法是注入图像。有(至少)两种可能的方式来实现这种情况:

div {
  background-image: url("evil.png");
}

img {
  content:url("evil.png").
}

允许用户“强制”渲染图像是极其危险的,因为您可以使用 PHP 来欺骗图像的内容——您可以从查看 PHP 图像的人那里挖掘各种信息,例如他们的 cookie、他们的浏览器,甚至他们的操作系统。更糟糕的是图像将正确渲染,因此观看图像的人甚至不会注意到任何可疑的东西。

考虑用户能够上传图像的其他情况,例如在论坛上设置个人资料图片(最终会成为<img>)。关键在于用户如何能够save图像以便其他用户渲染它。对于个人资料图片上传,服务器验证通常会阻止用户上传非图像或恶意图像的文件。验证内联注入的图像几乎是不可能的background-image or content URLs.

除此之外,我们甚至可以采取这一步further,通过告诉 URLitself运行 JavaScript:

url('javascript: eval(evil)');

正如你可以想象的那样,这使得攻击者几乎可以做anything他们要。

还有一些更罕见的 XSS 方法,甚至允许直接使用behavior标签和 HTC:

body {
  behavior: url(evilscript.htc);
}

还值得注意的是,使用同源策略 https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy is 可利用的其本身也是如此not secure https://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy.

因此本质上,虽然内联样式稍微提高了速度,正如您所说,但安全性和速度之间存在明确的权衡。尽可能避免内联样式;)

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用内联样式有哪些风险? 的相关文章

  • jQuery animate() 和 CSS calc()

    我尝试设置CSScalc 使用 jQuery 动画 例如 element animate height calc 100 30px 500 我注意到calc 不支持 jQuery 动画 我希望有一种方法可以做到这一点 我不想要类似的方法 替
  • 将单选按钮放置在图像上

    我试图在图像上的确切位置放置一些单选按钮 我已将两者都放在 Div 中 但我不知道下一步该怎么做 这是我想要放置单选按钮的位置 红色圆圈 到目前为止 这是我的代码 center display block margin left auto
  • iPhone 上的 Chrome 溢出空白页面上的内容(仅在新选项卡上,而不是重新加载)

    在 iOS Chrome 上 正文会在没有内容的新选项卡或页面上溢出 但如果重新加载页面 问题就会得到解决 它会给位于底部的任何元素 绝对或固定 带来问题 这是重现问题的代码
  • 如何使用过滤器进行输出编码以防止XSS?

    我在 servlet 中使用以下代码 protected void doGet HttpServletRequest request HttpServletResponse response throws ServletException
  • ReactTable 修复了最后一行

    我正在使用 ReactTable 最后我需要创建一些摘要 当分页存在时 它每次都应该可见 可以用react table来实现吗 我可以通过创建下一个表来部分解决这个问题 但我没有找到如何隐藏标题的方法 另一个问题是调整列宽度时 它不会应用于
  • @Font-face 不适用于 IOS

    我正在开发一个 WordPress 网站 并且在每个页面上都有一个 H1 标签作为该页面的标题 我正在使用 font face 的特殊字体 它在每个浏览器的 Windows 上都运行良好 但是当我切换到 Mac 时 它不会显示 h1 标签
  • javascript中怪异模式的元素宽度?

    我一直在浏览所有流行的 js 库 但我找不到一个具有 DOM 元素宽度函数的库 该函数实际上可以解释 Internet Explorer 中的怪异模式 问题是 当启用怪异模式时 填充和边框不会计入宽度 据我所知 当省略 doctype 或将
  • 限制 SQL Server 连接到特定 IP 地址

    我想将 SQL Server 实例的连接限制为特定 IP 地址 我想阻止来自除特定列表之外的任何 IP 地址的任何连接 这是可以在 SQL Server 实例或数据库中配置的东西吗 听起来像是你会使用Windows防火墙 http tech
  • 使用 bootstrap 将搜索图标放入文本框中

    我默认使用引导程序 文本框占据列的全宽 我想将搜索图标放在文本框的末尾 我的代码是这样的 div class container div class row div class form group col lg 4 div div div
  • 遭受xss攻击后如何恢复站点?

    最近我正在研究XSS攻击以及它们对网站的破坏性有多大 让我惊讶的是 网络 even SO 充满了关于如何防止xss攻击但没有相关资源说明如何在网站受到 xss 攻击后恢复网站 我遇到过一些事情 比如 将备份网站代码上传回服务器 下载整个网站
  • 生产环境的 Flask-Login 与 Flask-Security

    我正在构建一个功能 供用户注册 登录 验证和授权自己 特别是使用 Python Flask 作为后端 我找到了一些解决方案 例如flask login and flask security 据我了解 flask login实际上并没有进行任
  • 为什么我的图像下方有空间? [复制]

    这个问题在这里已经有答案了 图像在下面获得了神秘的空白空间 即使padding 0 margin 0被应用 示范 http jsfiddle net cLETP 红色边框应该包围图像 但底部有空间 造成这种情况的原因是什么 如何删除该空间
  • 可以将position:absolute元素设为粘性吗?

    In CSS position sticky使元素能够显示position static行为 即 它采用文档流中的默认位置 直到到达某个滚动位置 然后采用position fixed行为 那么 这是否意味着我们不能使用position st
  • 使用 python 在一个 html 页面中显示分割数据框的 HTML 代码

    我是 html css 新手 所以对以 html 格式显示的数据有疑问 我有一个很长的列表 我想将其拆分并以 html 格式显示为两个单独的列 例如 而不是 Col1 Col2 1 a 2 a 3 a 4 a 5 b 6 b 7 b 8 b
  • 网站在 iPhone 屏幕右侧显示空白区域

    我遇到问题http eiglaw com http eiglaw com iPhone 屏幕右侧显示约 25 像素宽的空白 边框 我在 stackoverflow 上研究了这个问题 这些帖子是相关的 但是当我尝试提供的各种解决方案时 我无法
  • div 中的中心文本?

    我有一个div 30px高和500px宽的 这div可以包含两行文本 一行在一行 并相应地设置样式 填充 但有时它只包含一行 我希望它居中 这可能吗 要水平居中 请使用text align center 要垂直居中 只能使用vertical
  • 如何在Yii框架中向Form添加类?

    我在 Yii 中有一个表单 我想向该表单添加一个类
  • 使用 CSS 折叠和展开元素

    我正在尝试构建一个页面 加载时仅可见标题 并且 当用户单击标题时 每个标题下方的表格会在隐藏和显示状态之间切换 我的限制是只能在 CSS 中执行此操作 这是我到目前为止想到的 https jsfiddle net Argoron c1ypx
  • 主页(网格)上的缩略图现在显得模糊。如何纠正?

    我不知道这看起来是否愚蠢 但从早上开始我就无法纠正这个突然出现在我的博客网站上的错误www candidopinions in http www candidopinions in 我有一个网格视图模板 其中博客文章中的特色图像作为调整大小
  • Webpack 4:如何使用 LESS 获取 CSS 源映射?

    多年来我一直在尝试让 CSS 源映射在 webpack 中工作 但没有成功 我不确定链条中哪里出了问题 我希望有人能指出我正确的方向 这是发生的事情 行号是错误的 实际上文件名也是错误的 main less只是包含一堆 import也就是说

随机推荐