【问题标题】:Reduce chances of PHP plugins being malicious减少 PHP 插件被恶意攻击的机会
【发布时间】:2011-03-11 09:25:08
【问题描述】:

我想知道您使用什么步骤来防止下载的插件被恶意下载?

比如wordpress做了什么来保证你下载的插件不会简单的执行unlink('/')

我假设它部分取决于下载者安装插件以使用他或她自己的判断力,但插件系统是否采取措施将运行 3rd 方插件的安全风险降至最低?

谢谢! 马特·穆勒

【问题讨论】:

  • PHP 团队多年前要求 Linux 发行版供应商停止调用“解释器崩溃错误”安全问题,因为 PHP 脚本可以做任何操作系统访问控制系统允许它做的任何事情。 (他们还对所有安全模式“中断”提出了同样的要求。)无论您运行什么脚本,都可以完全访问进程所有者拥有的所有内容,这是设计使然。只运行您信任的代码。

标签: php security plugins wordpress


【解决方案1】:

简单的答案:您不能以编程方式执行此操作。根本做不到。当然,Wordpress 有某种验证器来确定插件是否完全令人讨厌,但没有办法确定它是安全的。

今年夏天我是 Mozilla 的一名实习生,我正在开发一个验证器,用于在插件提交到 addons.mozilla.org 时对其进行扫描。我只能想象 Wordpress 有一个非常相似的工具。这个想法是该应用程序完全拒绝公然的恶意代码 (eval("evil nasty code");),而其余部分则通过一些简单的启发式方法进行分析。现有的算法会根据它在附加包中看到的内容标记一些潜在的危险信号,并将这些注释提交给编辑,然后由编辑审查代码。它实际上最终成为了一个人力过程,但该软件有助于处理很多繁重的工作。

Mozilla 验证器使用的一些技术:

  • 语法检查
  • 代码和标记解析 (HTML/CSS) 以查找远程代码漏洞
  • Javascript 解析和分析(将 JS 解析为 AST 树并分析每个语句,尽可能深入地评估静态表达式)
  • 兼容性/弃用测试

你可以在这里查看代码:

http://github.com/mattbasta/amo-validator

希望这会有所帮助!

【讨论】:

  • 太棒了!非常感谢 - 这非常有帮助!我一定会检查验证器,谢谢!
  • @The Rook:这就是为什么我说“你不能以编程方式做到这一点”。很多事情都会影响代码的功能,因此您所能期望的最好结果是在将实际代码传递给人工编辑之前先扫描明显的事物。
  • @mattbasta 这很有趣,我没有仔细阅读您的帖子。尽管我看到了一些 Mozilla 开发人员对 Defcon 上关于黑客 Mozilla 插件的讨论的反应,但基本上他们对此不以为然,并很难过这不是他们的错,并拒绝了限制插件访问权限的想法。我现在正在使用 chrome。
  • @The Rook:我不能代表其他开发人员,但我们处于 addons.mozilla.org 是附加组件的“干净区域”的位置。我们运行基于软件的清洁度检查,然后在附加组件被接受之前由实际人员进行仔细检查。当然,Chrome 扩展程序本质上更安全,尽管您可以使用 Chrome 构建的扩展程序类型要复杂得多。另外——记录一下——我也运行 Chrome ;)
  • @mattbasta 插件造成的安全问题对于很多软件包来说都是一个大问题。起初我以为你在哪里边缘化了问题的范围。现在我意识到你处于最前沿,清洁区是个好主意。 (+1)
【解决方案2】:

unlink('/') 不会造成任何伤害,因为它只会删除文件,您必须使用 rmdir 或更准确地说是 recursive rmdir 实现。我不认为有任何方法可以防止恶意代码被执行,因为有很多方式是恶意的。您可以限制某些函数在 php.ini 中被调用,但这只会在一定程度上帮助您。例如,str_repeatunserialize 是常用函数,但如果使用正确的参数调用它们,它们可以立即耗尽分配给 PHP 脚本的所有内存。但这只是一个例子,更邪恶的可以充当后门或通过电子邮件将所有登录信息发送给开发人员。如果您不想自己审核代码,我想最终您将不得不信任开发人员和社区。​​p>

【讨论】:

  • 哦哈哈好吧..我在某个地方看到它看起来很糟糕,所以我抓住机会将它包含在帖子中。无论如何,感谢您的洞察力!
  • +1 是的,没有办法保护 WordPress 安装免受失控插件的影响。 Wordpress 可以访问的内容,插件可以访问。 safe_mode 之类的东西和阻塞功能只能设置为影响整个安装,而不是它的一部分。仅从您信任的来源下载,并可能对可疑的eval() 和其他内容进行快速审核,这是最好的方法。
  • @Pekka,你就是那个男人——你总是帮我解决我的问题。谢谢!
  • 是的,这篇文章是正确的。我不知道为什么 mattbasta 会收到这张支票。
【解决方案3】:

有一些 PHP 工具可以执行Static Source Code Analysis 以查找漏洞。 php的开源分析工具包括RATSPHP-SAT

如果您曾经使用过静态源代码分析,那么您就会知道这些工具会产生 TON 的误报和误报。没有源代码分析工具可以告诉你 100% 的天气或程序是否有后门或可能是恶意的。如果可以,那么我们就不会有太多网站被黑客入侵的问题了。 Wordpress 本身非常不安全,所有插件也是如此,这是因为错误,而不是恶意。

恶意代码可以被混淆、隐藏并采取多种形式。试图找到一个偶然的漏洞比故意的漏洞要容易得多。 PHP 中的后门可以像添加或删除 2 个字节一样简单。

删除 2 个字节:

$id=mysql_real_escape_string($id);
"select * from test where id=$id"
vs
"select * from test where id='$id'"

或添加 2 个字节:

`$_GET[b]`;

【讨论】:

    猜你喜欢
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多