我不敢相信这个问题尚未在此站点上得到解答,但是我在搜索时没有找到,所以...
为什么是这样一个坏主意违反自然罪黑客核心是什么?
- 能够升级核心版本真的很棒吗?无论如何,我的大多数站点最终都拥有可怕的过时核心,所以为什么要打扰呢?
- 即使对站点所有者来说很糟糕,为什么社区会如此关心呢?为什么将其称为“杀死小猫”?那不是双曲线吗?
- 黑客核心是如此简单,我们不喜欢走更简单的途径来解决问题吗?
- 难道不是只有通过破解内核才能解决的问题吗?然后怎样呢?
我不敢相信这个问题尚未在此站点上得到解答,但是我在搜索时没有找到,所以...
Answers:
一般来说,不更改Drupal核心代码的原因有三个:
如果不采取任何必要步骤,则每次更新Drupal时所做的更改都会丢失。即使在为当前使用的Drupal版本创建补丁的情况下,该补丁也无法应用于较新的版本,因此您也需要为新版本创建补丁。
安全修复程序适用于Drupal.org上维护的Drupal核心,但不适用于您的被黑版本。这意味着您应该检查您的版本是否不受针对Drupal核心提出的安全问题的影响。
如果被黑客入侵的版本引入了另一个安全问题,那么您是唯一可以找到它的人,因为您没有安全团队的支持,无法调查Drupal核心代码和第三方中存在的安全漏洞。 Drupal.org上托管的模块。
您引入的更改可能与Drupal本身不兼容,但也与第三方模块不兼容,这些第三方模块必须与Drupal核心一起使用,而不与任何可以创建的黑手版本兼容。
每次Drupal引入新功能(在Drupal 7和Drupal 6中仍然会发生,尽管频率较低)或新的API更改时,被黑客入侵的版本就有可能与最近的更改不兼容。
也就是说,可以创建一个被黑客入侵的版本,但这不是单个开发人员可以承担的任务,就像不由一个人维护Drupal一样。实际上,Pressflow是Drupal 的黑客版本,其创建时考虑到了性能,并解决了Drupal网站可能存在的一些性能问题。
难道不是只有通过破解内核才能解决的问题吗?然后怎样呢?
在大多数情况下,无需编辑Drupal核心代码即可更改功能/行为。总有一个挂钩可以更改Drupal的功能/特性,这是首选方法。
In the case your hacked version introduces a different security issue...
我认为这不是修改核心文件与其他任何文件的特别有力的论据。如果我不是黑客,而是通过模块引入安全问题,那么我的系统仍然会受到威胁。妥协是妥协的,这与我编辑现有文件或添加新文件无关紧要。
我可以在这里写一个详尽的答案,但我只想发布此链接:永远不要破解内核!
我猜的主要原因是,如果您破解核心来做您需要的事情,然后对其进行更新……...!您的更改已消失。丢失。然后,您可以尝试从VCS回滚代码,但是看到您无法从Drupal核心回滚数据库升级-您正在查看从VCS还原所有代码,然后从备份还原数据库。在您尝试回滚代码的所有时间中,您可能会发现上一次更新前数据库备份失败,并且发誓要比以前宣誓承担更多。
另外-最重要的是-如果您破解核心,那么Dries和Webchick都会杀死一只小猫:-o
如果您不掌握核心知识,那么每个人都是赢家!
我目前正在一个被黑的核心网站上工作。我很难找到如何设置像字体一样简单的东西。我还花了几天时间修复由核心hack引入的错误。我通过在整个drupal代码中搜索字符串来找到它。
如果您不遵循drupal中编程的标准结构,那么其他人如何找到并编辑您引入的更改?这特别痛苦,因为在drupal中,每个单独的php文件都可以实现钩子。尝试找出导致问题的原因。
“难道不是只有通过破解内核才能解决的问题吗?那又是什么?”
要回答这个问题,是的,有时您需要克服一些问题,这意味着您必须破解内核(或contrib模块)。
在这种情况下,我相信只要您在被入侵的代码中添加大量注释并记录您所做的更改,就可以入侵。
例如,对于任何核心或贡献更改,我都会创建一个补丁。如果它对其他人通用且有用,请在问题中将其提交给drupal.org,否则仅供我使用。
然后,我将补丁文件和代码更改一起提交给我的版本控制。
这意味着我可以通过查找补丁文件来查看是否被黑客入侵。
除此之外,我还向该站点的开发人员文档中添加了一些黑客列表(您确实应该拥有开发人员文档,以便其他人可能在该站点上正常工作,并且在您不可避免地忘记事情时也可以自己使用)。
在此hacks文档中,我列出了每种hack的内容以及该hack的用途,原因,受影响的模块/文件,包含该hack代码的补丁文件的名称,以及到相关drupal.org问题的链接(如果存在的话)(几乎总是就我而言)。
这样,您和以后在该网站上工作的其他人就会拥有完整的黑客列表,而不必担心会因更新而意外破坏某些内容。
然后在更新过程中,我检查了我的黑客列表,并快速查找了我要更新的所有模块中的补丁文件。如果存在黑客行为,并且存在drupal.org问题,我会检查该问题,以查看最新版本是否包含该补丁,在这种情况下,我会通过更新删除该黑客并将其从我的黑客列表中删除(通过查看drupal.org提交消息,可以确定所提交的内容与您所使用的修补程序的版本相同,或者至少在功能上相同)。
如果未提交补丁,那么我要做的就是更新模块并重新应用补丁。在很多情况下,补丁仍然可以干净地应用,并且过程很容易,但是有时您必须重新发布新版本的补丁,然后将新版本的补丁提交到本地存储库(以及将其发布到相关的drupal.org问题)。
如果我有更多实质性的补丁或与模块的核心功能进行交互的补丁(或者只是在drupal.org模块之上扩展的自定义模块)进行交互,我想做的另一件事是检查已更新模块的发行说明(这表示介于当前版本和要更新到的版本之间的所有版本),并确保其中没有任何可能破坏代码的内容。注意:如今,许多模块维护者都可以提供完整的发行说明,但是很多东西仍在处理垃圾发行说明。在这种情况下,在某些情况下,我会浏览自当前版本以来的所有提交消息(通常仅在我具有与另一个模块深度交互的复杂代码的情况下)。注意:
然后,在更新之后(在网站的开发副本上),进行彻底测试。最终,您将彻底了解一些错误之后的含义。
然后,在对其进行充分测试之后,升级实时站点或向上推送本地更新或进行任何部署过程。
每个人都说不这样做的原因,即使它更容易:因为大多数人没有像我概述的系统,所以到了进行更新的时间,或者将站点移交给其他人来工作继续,这变成了一场噩梦,必须花费大量时间(有时要花费大量时间)来解决错误,跟踪黑客并弄清它们为何存在,等等。
如果您继承了这样的网站,您将完全理解:)