实施原始网站架构时需要考虑的事项

时间:2010-12-16 05:53:31

标签: php security zend-framework architecture

你应该知道的事情知道我的性格 -
 1.我的第一次建立一个“大”网站  2.使用 PHP
 3. 不知道该网站的可扩展性,尽管我已经阅读了相当多的内容。
 4. 愿意使用框架,如果它在架构中给予我很多灵活性,同时仍然为我提供安全性,性能等优势。

主要问题是 -
假设您在我的位置并希望实现原始架构,您需要注意哪些事项?
您将如何实施安全性?无论如何,您可以导入第三方安全模块并将其集成到您的网站中吗?

我知道我正在制造缺陷......只是想知道它们主要是什么......接下来会解决它们。谢谢:]。

2 个答案:

答案 0 :(得分:5)

您应该首先阅读并测试Zend Framework。因为这只是一个框架和一系列图书馆和长期发展的经验。

有些人说你应该先尝试构建自己的框架,然后把它扔进篮子并回到ZF(Zend Framework)。这取决于你有多少时间(年)。但这是正确的,当你以前疯狂的时候更容易理解好的选择: - )

这个世界上没有人可以自己建立一个好的建筑,你需要别人的经验来制造你自己的新错误,而不是旧错误。过去没有人足够聪明来阻止我们使用所有这些CMS(phpNuke,还有更多,但我不想伤害那些仍然在那里工作的大型CMS上的人)。

所以使用ZF MVC模型,读取(真的)ZF文档(即使你不会使用它)。了解为什么这些工具对安全性非常重要。

一个好的PHP应用程序要注意的重要事项:

无需共享:默认情况下PHP无法在用户请求之间存储数据。所以中期存储/长期存储/会话存储必须存储在某个地方:

  • cookie(如会话ID)
  • 数据库中的会话文件或会话记录或缓存中的会话记录
  • 应用程序级缓存(如memcached)
  • 数据库(为什么不为PostgreSQL抛出MySQl,测试区别!)
  • 预应用级别缓存(反向代理缓存,清漆等,浏览器缓存)

过滤输入/转义输出:如果你善用Zend_Form,Zend_Filter,Zend_Validators,如果你总是在你的视图中使用escape(),这部分安全性应该没问题(这个在大多数PHP应用程序中是一个很大的大问题)。将您的数据库视为输出,html页面作为另一个,json作为另一个,等等。您的输入也是众多,用户输入,cookie,可能是其他一些数据库,外部网站等。

避免绝对网址:尝试始终使用相对网址。至少总是使用框架提供的url helper来构建你的url。

获取精美的网址:如果您只需阅读网址就可以将应用程序分成不同的部分,那么您将需要为应用程序构建更复杂的硬件平台。管理员需要在应用程序前面为反向代理缓存设置一些配置文件。他们能够检测到所需的https部分吗?您是否通过特定路径提供所有静态文件?我们可以根据网址定义缓存时间策略吗?

设计模式:没有人足够聪明地理解他的编码选择的所有后果以及这段代码必须发展的方式。设计模式可以收集良好的实践。如果你的问题没有设计模式解决方案,那么也许你不明白你的问题:-)。说实话,有时可能会有一种更简单,更快捷的方式,但在决定不使用它们之前,你应该知道这些模式。

许多PHP专家在不使用框架的情况下完成了他们的代码(因为大多数框架实际上并不是很好)。但PHP世界中的代码质量很差,实际上,在很多网站上进行XSS注入仍然很容易。现在是时候变得更好了,不要相信你好世界的例子,建立一个好的webapp很难: - )。

答案 1 :(得分:2)

每当我开始任何新的网站项目(特别是使用PHP的项目)时,我都会在纸上计划。为了保持文件整洁有序(架构),遵循MVC格式是明智的。 Read more about MVC这是我使用的组织系统,许多专业人士使用。

这样可以更轻松地扩展您的网站,添加更多页面和功能,因为您的功能将独立于用户正在查看的页面并输入信息(UI)。

此外,在您的代码中发表评论非常重要,您可能永远不会有足够的评论,而且当您编写大型网站时更是如此,因为您不可能完全记住它,并且它会对您有所帮助进行更改和扩展您的网站。

就安全性而言,有一些方法可以用来防止安全威胁,我在PHP应用程序方面已经阅读了一些关于安全性的好文章。 Here is one.

我不能强调你应该在开始编码之前计划出你打算如何使网站工作并布置文件组织,从长远来看,这将为你节省大量的工作和压力。

之前我编写了大型PHP / MYSQL驱动的网站,并且我已成为许多错误的受害者,请从我的错误中学习,规划您的文件结构以及您如何计划要执行的特定用户交互。

至于框架,我从未使用过,但我已完成研究并使用MVC格式。我喜欢独自完成这一切,而不是必须学习一个框架。如果您正在进行重复编码,那么框架是很好的,但即便按照这个说明,我也会使用函数。

希望这有帮助!如果您有任何问题,请随时提出。

  • 克里斯