Security 本地化消息中可能存在的安全风险

Security 本地化消息中可能存在的安全风险,security,localization,Security,Localization,如果web应用程序允许用户提供翻译消息,以便将应用程序本地化为给定的语言或区域设置,那么其中涉及的潜在安全风险是什么。[除了显而易见的社会工程之外] 这些翻译消息通常是某种格式的键值对的集合,具体取决于语言/库等。例如,许多OSS PHP应用程序中的PHP数组文件、使用gettext的应用程序的getetxt.po文件、Rails中的Yaml文件以及许多其他文件 这样的翻译数据随后被用于在站点可用的区域设置列表中提供一个新的区域设置。老实说,这是一个奇怪的问题。我假定您已经阅读并理解了本手册。我

如果web应用程序允许用户提供翻译消息,以便将应用程序本地化为给定的语言或区域设置,那么其中涉及的潜在安全风险是什么。[除了显而易见的社会工程之外]

这些翻译消息通常是某种格式的键值对的集合,具体取决于语言/库等。例如,许多OSS PHP应用程序中的PHP数组文件、使用gettext的应用程序的getetxt.po文件、Rails中的Yaml文件以及许多其他文件


这样的翻译数据随后被用于在站点可用的区域设置列表中提供一个新的区域设置。

老实说,这是一个奇怪的问题。我假定您已经阅读并理解了本手册。我假设您知道如何保护自己的服务器免受攻击

在我看来,对这个翻译系统最明显的攻击是持久的XSS,它允许攻击者使用这个数据集破坏每个网站。仅仅说“哇,我们对这些值进行了编码”是不够的。如果您将这些数据集提供给第三方,您不能期望所有这些数据集都正确地清理数据。更糟糕的是,XSS不能保存整个数据集并期望它100%安全,因为您不知道数据将如何在HTML文档中使用。问题是,数据可能最终会出现在脚本标记或事件中,然后html编码的保护可能会完全失效。当我看到有人试图阻止xss时,我总是咯咯地笑,这是错误的方法

总之,这个问题确实没有100%的解决方案,但这将阻止大多数xss:

$var=htmlspecialchars($var,ENT_QUOTES,"UTF-8");
$var=rtrim($var,"\\");

显然,
rtrim()
用于帮助防止脚本标记中出现xss。如果字符串以反斜杠结尾,则可以从带引号的字符串中打断,反斜杠与引号一样危险

一旦您放弃对内容的控制,您就实际上允许任何“授权”内容提供商向您的UI添加任何他们想要的内容。即使您阻止执行内容中包含的潜在代码,也无法阻止向用户显示不适当的文本(或图像),除非您在系统的入口点屏蔽该文本


解决这一问题的一种方法是通过和内容提供商签订服务合同,规定内容验证的义务。根据提供者的不同,这可能足以让您轻松地放弃控制权。否则,几乎没有人可以代替应用程序所有者组织在批准发布之前批准所有提交内容的人。

我认为可以肯定地说,“新”字符串中的HTML元素只能是旧字符串中的HTML元素,减去一些特定属性,例如
title
alt

例如:

  • 英文字符串:
    将此消息悬停
  • 荷兰语翻译:
    Hang hier met de muis boven
    -将标记为安全
  • 荷兰语翻译:
    Hang hier met de muis boven
    将由过滤器失效

不过,您必须编写一个相当强大的过滤器,并始终验证没有添加、删除属性,也没有添加或删除HTML元素。另外,请务必小心使用

谢谢你的回答。我(在一定程度上)知道各种攻击。问题并没有这样说,但我正试图从更广泛的角度看待这个问题-大多数(所有?)应用程序的设计假设l10n数据只有一个控制点——我正在考虑其他情况,例如l10n数据由第三方维护,并通过CDN提供。@Basel Shishani你在抓救命稻草。我担心你在t结束时在奇异问题上花费太多时间他说,最简单的问题就是让人们被黑客攻击得落泪。持久性XSS是一个非常严重的漏洞,允许攻击者引入iframe并利用浏览器或破坏网站。@Basel Shishani还应该指出,在我清理的绝大多数受损网站中,攻击者使用了复杂的远程cod在服务器上执行,在主页上引入一个简单的iframe来利用浏览器。首页上存储的xss对绝大多数罪犯来说是最有价值的web应用程序利用。