【问题标题】:SVG source code via PHP formSVG 源代码通过 PHP 表单
【发布时间】:2013-08-26 16:02:27
【问题描述】:

我在网上商店使用在线照片编辑器。用户可以使用 svg-edit 编辑照片并保存更改。用户结果存储为 SVG 源代码 (...)。我必须通过 PHP 表单发送该 SVG 源代码,将其保存在数据库中并显示在管理面板中。

我害怕对我的网上商店进行任何注入或攻击。有没有可能让它安全?

我无法为 SVG 源代码生成私有哈希,因为它是客户端,我可以通过 AJAX 发出任何请求。

@编辑

示例:用户保存...代码并且该代码正在通过 POST 发送。在 PHP 脚本中,我可以访问 $svg = $_POST['svg_source'];我担心在那个 POST 值中注入。攻击者可以注入任何 HTML、JS、其他源代码。

@编辑:

然后我可以在 DB 中存储 $_POST 值...并在 PA 中查看它。但是攻击者可以编写一些...代码,它将在我查看 SVG 图像的 PA 中执行(基于 SVG 代码)

@编辑:

我需要一些解决方案来检查 SVG 代码是否有效并且不包含任何 JS、HTML 代码。或者 - 我需要一些解决方案来安全地查看网站上的 SVG 代码。

【问题讨论】:

  • 什么样的注射? sql? css/html? svg?如果您使用适当的防御性编程技术,则根本不必担心注入攻击。
  • 示例:用户保存 ... 代码并且该代码正在通过 POST 发送。在 PHP 脚本中,我可以访问 $svg = $_POST['svg_source'];我担心在那个 POST 值中注入。攻击者可以注入任何 HTML、JS、其他源代码。
  • 那有什么问题?用户通过表单提交的任何数据都将显示在 _GET 或 _POST 中......
  • 然后我可以在 DB 中存储 $_POST 值 ... 并在 PA 中查看它。但是攻击者可以编写一些 代码,它将在我查看 SVG 图像的 PA 中执行(基于 SVG 代码)
  • 直接在问题中添加您的 cmets 中所需的信息,这样阅读问题的人不必阅读 3-4 cmets 即可完全理解。

标签: php security svg


【解决方案1】:

在将用户输入存储到数据库之前,请考虑使用 mysql_escape_string() 之类的内容包装用户输入。就 SQL 注入攻击而言,这将为您提供一些缓解。

就 HTML/javascript 注入而言,您需要根据 W3 标准验证 SVG 文件。我快速搜索了一下,发现了这个:

Sanitizing SVG using PHP

这导致了这些: http://us3.php.net/manual/en/domdocument.schemavalidate.phphttp://us3.php.net/manual/en/domdocument.validate.php

我希望这会有所帮助。

编辑:

正如下面 cmets 中所建议的,您可以通过仅将您认为安全的元素列入白名单来解析 SVG 文件。看起来已经有一篇很好的帖子涵盖了这个:

Sanitizing an SVG document by whitelisting elements

【讨论】:

  • 由于 SVG 可以拥有 embedded JavaScript 并且仍然有效,并且允许在您的站点上执行任意 Javascript 实际上是 XSS 的定义……根据 W3C 标准进行验证并不会起到任何作用防御 XSS。
  • @Quentin - 是的 - 好点。我想需要的是解析 SVG 并消除任何
  • 黑名单注定失败。您需要将被认为是安全的特定元素和属性列入白名单。
  • @Krzysztof Piątkowski - 查看我的答案底部附近的编辑,看看该链接是否对您有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
相关资源
最近更新 更多