我们为什么不破解核心?


17

我不敢相信这个问题尚未在此站点上得到解答,但是我在搜索时没有找到,所以...

为什么是这样一个坏主意违反自然罪黑客核心是什么?

  • 能够升级核心版本真的很棒吗?无论如何,我的大多数站点最终都拥有可怕的过时核心,所以为什么要打扰呢?
  • 即使对站点所有者来说很糟糕,为什么社区会如此关心呢?为什么将其称为“杀死小猫”?那不是双曲线吗?
  • 黑客核心是如此简单,我们不喜欢走更简单的途径来解决问题吗?
  • 难道不是只有通过破解内核才能解决的问题吗?然后怎样呢?

我认为,如果您自己创建没有团队的小型网站,也许您可​​以在需要时破解核心,但是为什么需要它?我相信您可以在不
破坏

4
@贝丝我实际上对此很认真。由于单元测试的问题,D7中安全页面所需的补丁程序已经挂了一年多了。据我所记得,D6中仍然存在菜单机器名称长度错误。这些都没有显示出实际投入的任何进展。
mpdonadio

3
@MPD实际上,这是一个很好的例子,我知道很少有人在为这些补丁而哭(包括我在内)。除了小猫,很明显有时候您绝对必须修补核心,只要这些修补文件有据可查并且可以供团队中的每个人使用,那就没有错。它还说明了一个可靠的部署过程的重要性,该过程不会在没有事先进行半手动检查的情况下盲目执行更新。在我的(小型)团队中,我们只记录更改内容,并确保每个人都知道在更新之前进行检查
Clive

3
应用补丁并将其记录在存储库根目录中的文本文件中。
Charlie Schliesser 2013年

1
我将其重新表述为“永不hack内核,除非您具有仍然可以进行更新的机制”。这需要一些思考,并且对您的开发工作流程有影响。如果您或您的团队没有足够的保姆服务,请不要这样做。
donquixote 2015年

Answers:


9

一般来说,不更改Drupal核心代码的原因有三个:

  • 如果不采取任何必要步骤,则每次更新Drupal时所做的更改都会丢失。即使在为当前使用的Drupal版本创建补丁的情况下,该补丁也无法应用于较新的版本,因此您也需要为新版本创建补丁。

  • 安全修复程序适用于Drupal.org上维护的Drupal核心,但不适用于您的被黑版本。这意味着您应该检查您的版本是否不受针对Drupal核心提出的安全问题的影响。
    如果被黑客入侵的版本引入了另一个安全问题,那么您是唯一可以找到它的人,因为您没有安全团队的支持,无法调查Drupal核心代码和第三方中存在的安全漏洞。 Drupal.org上托管的模块。

  • 您引入的更改可能与Drupal本身不兼容,但也与第三方模块不兼容,这些第三方模块必须与Drupal核心一起使用,而不与任何可以创建的黑手版本兼容。
    每次Drupal引入新功能(在Drupal 7和Drupal 6中仍然会发生,尽管频率较低)或新的API更改时,被黑客入侵的版本就有可能与最近的更改不兼容。

也就是说,可以创建一个被黑客入侵的版本,但这不是单个开发人员可以承担的任务,就像不由一个人维护Drupal一样。实际上,Pressflow是Drupal 的黑客版本,其创建时考虑到了性能,并解决了Drupal网站可能存在的一些性能问题。

难道不是只有通过破解内核才能解决的问题吗?然后怎样呢?

在大多数情况下,无需编辑Drupal核心代码即可更改功能/行为。总有一个挂钩可以更改Drupal的功能/特性,这是首选方法。


4
我可能会发布我遇到的两个现实问题,这些问题可能会挑战上一段中的主张。
mpdonadio

3
In the case your hacked version introduces a different security issue...我认为这不是修改核心文件与其他任何文件的特别有力的论据。如果我不是黑客,而是通过模块引入安全问题,那么我的系统仍然会受到威胁。妥协是妥协的,这与我编辑现有文件或添加新文件无关紧要。
Zoredache

@Zoredache如果模块中存在安全问题,则可以随时将其禁用,并且该站点的其余部分都可以正常工作,即使没有功能也没有安全问题。如果您在Drupal核心代码中引入了安全性问题,并且由于您还更改了Drupal使用的某些表的架构而无法简单地复制回原始文件,那将是一个更大的问题。
kiamlaluno

2
“总是有一个钩子……”的说法是不正确的。在drupal核心中烘焙出某些东西,如果不进行黑客攻击就无法解决,并且在未提交补丁的情况下也存在drupal的开放性问题,在这种情况下,您必须对核心进行补丁修复解决这些问题。
rooby

2
绝对可以,但这只是一个简单的例子。在大多数情况下,都有钩子,但是仍然需要修补内核,除非您想复制大量代码并构建更多自定义的东西。例如,要允许管理员正确管理未出版的书籍,您需要在drupal.org/node/520786上安装补丁,或者如果您希望drupal的默认SQL搜索来匹配部分单词(包括视图搜索过滤器),则需要在drupal.org上使用补丁。/ node / 498752#comment-6001310-解决这些问题而又不破坏内核是不可行的。
rooby

14

我可以在这里写一个详尽的答案,但我只想发布此链接:永远不要破解内核

我猜的主要原因是,如果您破解核心来做您需要的事情,然后对其进行更新……...!您的更改已消失。丢失。然后,您可以尝试从VCS回滚代码,但是看到您无法从Drupal核心回滚数据库升级-您正在查看从VCS还原所有代码,然后从备份还原数据库。在您尝试回滚代码的所有时间中,您可能会发现上一次更新前数据库备份失败,并且发誓要比以前宣誓承担更多。

另外-最重要的是-如果您破解核心,那么Dries和Webchick都会杀死一只小猫:-o


4
什么,他们杀死了小猫?我以为是上帝 。我的世界在自己周围塌陷……
克莱夫(Clive)

1
您知道,我在上面看到小猫之前就在上面写了评论。
mpdonadio

13

“开发人员无法为我做些什么?”

  • 您的站点可以升级以获取安全版本
  • 您的网站可以升级以修复核心中令人讨厌的错误
  • 您的网站可以升级以支持新模块
  • 您的错误报告以及对core和contrib的支持请求将能够得到响应
  • 您要使用受支持的CMS,这就是选择Drupal的原因。用webchick的话说,当您破解核心时,“恭喜您!您已经创建了自己的Drupal分支,现在您和您一个人负责维护它!”

“黑客核心不能为我的客户做什么?”

  • 解雇客户/赢得彩票/被公共汽车撞中后,其他人可以维护您的网站

“黑客核心不能为我的社区做什么?”

  • 您的错误报告实际上将为核心或贡献模块的维护者提供有用的信息。
  • 如果您发现必须修正的核心合法漏洞,那么“黑客核心”与“成为核心贡献者”之间的界线就好比简单地散布您的更改并将其作为补丁上载到相关的问题中。维奥拉!Core更适合您的工作,而且您的名字与向社区回馈代码有关。

如果您不掌握核心知识,那么每个人都是赢家!


3
并非所有补丁都致力于核心,即使是简单补丁也是如此。
mpdonadio

1
的确如此,但是通过上传它,您至少具有补丁的记录,补丁的功能(可能是某些版本已被其他版本改进)以及能够将其下载并再次应用到项目中(如果您覆盖了更新)您的零钱。经常是为什么它没有被提交的原因,以及其他建议。全部免费。
2013年

6

我目前正在一个被黑的核心网站上工作。我很难找到如何设置像字体一样简单的东西。我还花了几天时间修复由核心hack引入的错误。我通过在整个drupal代码中搜索字符串来找到它。

如果您不遵循drupal中编程的标准结构,那么其他人如何找到并编辑您引入的更改?这特别痛苦,因为在drupal中,每个单独的php文件都可以实现钩子。尝试找出导致问题的原因。


4
这个。如果您继承了基于任何给定框架构建的网站,然后发现该框架已被黑客入侵,因此该框架的文档可能无关紧要,那么您将痛苦不堪。(除了上述所有其他原因...)
Charlie Schliesser

5
打赌,您希望您早先听说过drupal.org/project/hacked吗?
克里斯·伯吉斯

看起来很好克里斯。我一定会看看。
Pawel G

一个体面的Source Control系统应该能够告诉您发生了什么变化,并显示对Core的所有修改。在代码库中搜索字符串应该是php中调试工具包的标准部分。
Toby Allen

5

“难道不是只有通过破解内核才能解决的问题吗?那又是什么?”

要回答这个问题,是的,有时您需要克服一些问题,这意味着您必须破解内核(或contrib模块)。

在这种情况下,我相信只要您在被入侵的代码中添加大量注释并记录您所做的更改,就可以入侵。

例如,对于任何核心或贡献更改,我都会创建一个补丁。如果它对其他人通用且有用,请在问题中将其提交给drupal.org,否则仅供我使用。

然后,我将补丁文件和代码更改一起提交给我的版本控制。

这意味着我可以通过查找补丁文件来查看是否被黑客入侵。

除此之外,我还向该站点的开发人员文档中添加了一些黑客列表(您确实应该拥有开发人员文档,以便其他人可能在该站点上正常工作,并且在您不可避免地忘记事情时也可以自己使用)。

在此hacks文档中,我列出了每种hack的内容以及该hack的用途,原因,受影响的模块/文件,包含该hack代码的补丁文件的名称,以及到相关drupal.org问题的链接(如果存在的话)(几乎总是就我而言)。

这样,您和以后在该网站上工作的其他人就会拥有完整的黑客列表,而不必担心会因更新而意外破坏某些内容。

然后在更新过程中,我检查了我的黑客列表,并快速查找了我要更新的所有模块中的补丁文件。如果存在黑客行为,并且存在drupal.org问题,我会检查该问题,以查看最新版本是否包含该补丁,在这种情况下,我会通过更新删除该黑客并将其从我的黑客列表中删除(通过查看drupal.org提交消息,可以确定所提交的内容与您所使用的修补程序的版本相同,或者至少在功能上相同)。

如果未提交补丁,那么我要做的就是更新模块并重新应用补丁。在很多情况下,补丁仍然可以干净地应用,并且过程很容易,但是有时您必须重新发布新版本的补丁,然后将新版本的补丁提交到本地存储库(以及将其发布到相关的drupal.org问题)。

如果我有更多实质性的补丁或与模块的核心功能进行交互的补丁(或者只是在drupal.org模块之上扩展的自定义模块)进行交互,我想做的另一件事是检查已更新模块的发行说明(这表示介于当前版本和要更新到的版本之间的所有版本),并确保其中没有任何可能破坏代码的内容。注意:如今,许多模块维护者都可以提供完整的发行说明,但是很多东西仍在处理垃圾发行说明。在这种情况下,在某些情况下,我会浏览自当前版本以来的所有提交消息(通常仅在我具有与另一个模块深度交互的复杂代码的情况下)。注意:

然后,在更新之后(在网站的开发副本上),进行彻底测试。最终,您将彻底了解一些错误之后的含义。

然后,在对其进行充分测试之后,升级实时站点或向上推送本地更新或进行任何部署过程。

每个人都说不这样做的原因,即使它更容易:因为大多数人没有像我概述的系统,所以到了进行更新的时间,或者将站点移交给其他人来工作继续,这变成了一场噩梦,必须花费大量时间(有时要花费大量时间)来解决错误,跟踪黑客并弄清它们为何存在,等等。

如果您继承了这样的网站,您将完全理解:)


2

如果您通过安装和创建Drupal网站来谋生,那么有必要使其保持最新状态。如果您的大多数站点最终都过时了,那么您不是专业人士。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.