作为一个爱好,我已经用PHP开发了大约8年.在2009年,我选择了codeigniter,从那时起我就没有成功开发出一个项目.
我发现如果我想要如何修改它以我想要的方式工作,如果我在纯PHP中工作,我知道,或者我能够快速找到一个片段,这让我感到迟钝.
我已经尝试过CodeIgniter,Kohana和Symfony.我喜欢易用性(我也开始使用doctrine作为一个ORM,大大加快了我的数据库工作),但我发现项目花了我3-4倍于纯PHP的时间.当我无法找到解决我之前在纯PHP中解决的问题的解决方案时,我感到无聊和沮丧.
有没有人从使用框架回到无框架方法.是否有类似基本安全框架的东西(阻止XSS,过滤发布的数据,提供与数据库一起使用的清理功能)?我认为这样的事情比完整的框架更有益于我.我认为学习使用框架已经教会了我很多东西,但我会更乐意使用我自己的代码.
当前版本的PHP5包含许多您正在寻找的安全框架,作为标准库的一部分.
使用filter_input_array以声明方式清理来自外部的内容.
使用参数化SQL通过PDO访问数据库以防止SQL注入攻击.
使用以下PHP设置可以使您的网站更能抵抗会话固定和cookie被盗:
session.use_only_cookies(防止会话令牌泄漏到URL中)
session.cookie_httponly或session_set_cookie_params()的httponly
属性(防止脚本在兼容的浏览器中读取会话cookie)
维基百科上提供了更多建议和PHP示例代码.
您还可以将该httponly
属性与setcookie()一起使用.
新的HTTP和HTML5功能不需要比基本模板和标头设置更漂亮的东西:
HTTP严格传输安全性(有助于防止WiFi攻击.)
X-Frame-Options(限制页面嵌入.防止网络钓鱼.)
HTML5 IFrame沙盒属性(Sandbox第三方广告/徽章/视频.已经在WebKit中.可能至少部分在Firefox 11中实现.)
内容安全策略(Firefox 4的新安全框架,与沙箱属性互补.现在也在Chrome中实现.)
如果您接受HTML作为输入,我建议抓取HTML Purifier并通过filter_input_array设置中的FILTER_CALLBACK行调用它.它基于白名单的输入安全方法是针对XSS的一个很好的(并且非常强大的)第一道防线.
据我所知,PHP没有提供防止跨站点请求伪造的机制,但我确信Google可以帮助您解决这个问题.如果您想实施自己的保护,OWASP安全备忘单中包含一个部分.
出于好奇,我决定开始研究独立组件,这是我到目前为止所发现的:
模板:
PHP模板继承(常规PHP加模板继承)
TWIG(Django/Jinja2/Liquid- style语法,包括autoescape和sandboxing.编译为缓存的PHP以获得速度.)
Dwoo(更快,更有特色,PHP5-ish Smarty的继承者.包括现有Smarty模板的兼容性系统.)
东西我还没有适当地调查:
路由调度(到目前为止只找到了RouteMap和Net_URL_Mapper.谢谢,cweiske.)
ORM(以防万一裸PDO不是你的事)
我不相信框架......我曾在其中许多人工作过.
仇恨MVC框架的原因:
1)代码膨胀,我购买了帮助我开发的高级课程.如表单类或SQL类.
2)我认为MVC框架不易移植,尤其是在使用依赖管理器时.
3)我相信你实际上用MVC框架编写了更多的代码然后你必须使用一个样板来处理认证等大量有用的类.
4)大多数框架本身也只支持一个或两个数据库.
我建议找一个带有身份验证和文本编辑器的表单框架和一个像madoo +一个电子邮件类的SQL框架......
90%的应用程序始终是表单,sql和ajax CLASSES - 其余的可以在需要时获取
我是一个极简主义者,我在我的应用程序中没有做任何事情的代码的想法很困难......以防我需要它对我不起作用.
根据您的声明,您已经使用PHP作为业余爱好,以及您的个人资料声明"慢慢到达那里",这似乎是一个学习曲线问题.您似乎没有经验的深度和广度a)了解如何在框架所施加的结构内工作,以及b)您因此无法从框架所带来的效率中受益.
我敦促你坚持下去.回到视频教程的开头.查找并阅读其他人的代码,直到您理解为止.从下到上构建项目 - 简单地开始,并添加功能.关注论坛,在阅读回复之前尝试自己回答问题.
我已经在各种平台上进行了近20年的专业编程,而且我还需要一段时间才能熟悉CI.但是现在,我不会回到纯PHP(对于我自己的项目),除非我有一个足够规模的网站,它暴露了可量化的性能问题(想想Twitter).
有了这么多经验,你必须拥有自己喜欢的图书馆,亲自挑选并提出自己的简单框架.框架或没有框架(以及那个框架)取决于手头的项目类型,没有适合所有的手套.所以我强烈建议,如果您认为现有框架正在减慢您的速度,请花一些时间并提出一个符合您需求的框架.