Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们应该在一个框架中重写一个遗留的php应用程序吗?_Php_Security - Fatal编程技术网

我们应该在一个框架中重写一个遗留的php应用程序吗?

我们应该在一个框架中重写一个遗留的php应用程序吗?,php,security,Php,Security,我目前正在开发一个遗留的PHP应用程序。要让您了解应用程序的情况,请执行以下操作: 后端约14000 LOC。前端约为3000 LOC 每个url都是一个php脚本,不使用类 每个php脚本都有一个与之关联的smarty模板 它大量使用PEAR表单生成插件 前端提供两种语言。这可以通过复制php脚本+模板来完成 它没有遵循许多最佳实践,比如转义所有sql参数、在post请求时重定向、将php脚本从web根目录中删除、XSS保护、CRSF保护 这个应用程序有两个主要的开发者,我暂时正在开发它来帮

我目前正在开发一个遗留的PHP应用程序。要让您了解应用程序的情况,请执行以下操作:

  • 后端约14000 LOC。前端约为3000 LOC
  • 每个url都是一个php脚本,不使用类
  • 每个php脚本都有一个与之关联的smarty模板
  • 它大量使用PEAR表单生成插件
  • 前端提供两种语言。这可以通过复制php脚本+模板来完成
  • 它没有遵循许多最佳实践,比如转义所有sql参数、在post请求时重定向、将php脚本从web根目录中删除、XSS保护、CRSF保护
  • 这个应用程序有两个主要的开发者,我暂时正在开发它来帮助他们
  • 该应用程序由多个客户端使用。它们中的每一个都可能有一个稍微修改过的版本
假设您有两周的时间,您将如何修复此应用程序?是否有任何框架,你会建议特别适合这种类型的应用程序,并可以逐步推出

我在想,也许可以从引入ORM开始,摆脱sql注入,改进意大利面代码来构造sql查询

编辑1::因为人们似乎对供应链管理问题关注很多。我确实使用git跟踪我自己的本地更改。我只是暂时开发这个应用程序,所以我不能告诉其他开发人员使用哪些工具。而且,这不是真正的问题


编辑2:我考虑框架的原因是a)其他开发人员提出的b)它将使项目具有更严格的结构,因此将来更容易避免错误(如CSFR)。

我建议使用Symfony PHP框架。迁移应用程序的两周时间似乎太短了,特别是如果您还没有Symfony技能的话


Zend Framework也是一个非常好的PHP框架。

您应该用非常少量的代码重写,不要试图一次重构整个应用程序。在您实施修复或其他操作时执行此操作。始终对代码进行改进

如果应用程序工作正常,则尤其如此。大多数用户不会理解,当糟糕的代码对他们来说运行得非常好时,为什么需要中断他们的应用程序来提高代码质量

如果你重写了一个应用程序,你总是会丢失所有已经在应用程序中实现的遗留知识,就像旧的错误修复一样。可能存在一个bug,并且在过去已经被识别,您可能需要再次解决这个bug


顺便说一句,我不会一开始就把重点放在实现一个框架上。你应该试着把重点放在面向对象编程和在适用的地方实现一个设计模式上。当您的代码已经比较清晰和结构化时,实现一个框架。

一部分一部分地迁移/重新分解此应用程序将比重写它花费太多的工时

  • 如果你重写,最好从头重写。那就是从需求中重写它
  • 重写时,请维护旧站点。在SCM中使用分支。如果没有SCM,请从现在开始使用它,并在课后进行分支
  • 如果它运行得完美无缺(经过多次测试),那么就值得重新思考迁移问题

  • 假设您有两周的时间,您将如何修复此应用程序?(它不安全,并且有意大利面代码。)

    首先,先找到需要修复的地方

    如果到目前为止还没有分析应用程序,就无法在两周内将意大利面代码转换为模块化代码。此外,要重构代码,您需要首先对其进行测试,这可能会对遗留代码产生问题。有很多关于这类技术的书籍,但并不是所有的都适用于遗留PHP应用程序(但如果您到目前为止还没有对遗留应用程序进行维护的话,这些书籍都有非常有用的信息)

    因此,您可能希望将与数据库相关的代码移动到它自己的模块中,同时注意SQL注入。如果您为此选择了一个现有的数据库层,您可以通过查看代码明确地说哪些脚本已经移植,哪些没有移植

    您已经使用了一个视图组件,我将暂时使用它,因为您实际上只有一个很短的时间框架

    在我看来,将现有框架压入当前代码库似乎适得其反。您只是在寻找轻量级的、现有的和经过测试的组件,以便通过使用第三方组件减少自己编写的应用程序代码

    没有scm

    从您迄今为止分享的所有关于该应用程序的信息来看,这是首先需要解决的问题。将其置于源代码管理之下。在此之前,您无需进一步讨论


    我对这个问题给出了更详细的回答:。

    什么坏了?需要修复什么?SQL注入?输出编码?它是不安全的,而且有意大利面代码。当我读到这篇文章时,我想知道,你是否可以让这样的东西保持活力^^我不认为你可以在两周内重写它,但我强烈建议你做点什么。我希望很明显我没有写它。显而易见的第一步:实现SCM SYSTEM1。不是一个选项,我不想为客户冒险破坏它。2.哈哈,没有scm。开始使用scm吧。然后创建分支。@Maarten:如果没有SCM,那么在更改单个字节的代码之前,首先要做的就是将其置于SCM之下。我打算建议两位主要开发人员创建一个github帐户,但是我真的无法告诉他们应该使用哪些工具。对于每个拥有超过零个开发人员的项目,您将需要scm,或者您将丢失您的代码,或者至少在未来的很多时间!在这方面没有讨论,这是一个重大事实!我不知道有哪个项目没有使用scm,并且没有丢失一些代码。另一方面