关于简单blog系统的一些问题
编码的规范性#
无论写什么程序,编码的规范性都是很重要的,从源码中看到承佐的代码风格基本符合了PSR规范,不过还是建议承佐和雄佳再看看PHP的PSR规范,再对比一下自己的代码。
PSR-0和PSR-4是关于类的自动加载, PSR-3是关于日志加载的,有空的话可以自己在补充看完,而PSR-1和PSR-2是关于编码规范的,建议一定要看一下。
关于系统常量#
无论系统大小,将JS,CSS,IMAGES或者其他一些经常用到的常量定义成系统常量都是一个很好的做法,否则就像自己挖坑给自己跳一样。将来项目升级或者位置有变动就要一个一个文件地改回来,而定义成常量的直接在常量处修改就完事。平时养成一些好的习惯对自己很有帮助的。
系统的安全性#
虽然网站的安全性和漏洞一般都是有专门的部门负责的,程序员只需实现功能,但是,有一些比较低级的安全性工作程序员还是必须要掌握的,对于这方面在我想在我的能力范围内给你们普及一些安全性方面的工作。
1. 参数化查询
sql注入是一种攻击网站常用的手段,但参数化查询的出现之后,这种攻击手段基本上很难再达到目的了,而Yii的查询方法中已经封装了参数化查询的技术。
下面的一段代码,存在sql注入的漏洞
$name = $_POST['name'];
$user_model = User::model();
$sql = "select * from {{user}} where username = '$name'";
$user_info = $user_model -> findAllBySql($sql);
而另外一种写法就实现了参数化查询,解决了这个问题
$name = $_POST['name'];
$user_model = User::model();
$user_info = $user_model -> findAll(array(
'condition' => 'username = :username',
'params' => array(':username' => $name)
));
至于为什么参数化查询能够防sql很多人都是模棱两可的,想弄明白的话就多去百度谷歌,在这里一两句话也说不明白。
2. 登陆注册隐藏加密后的密码
如果细心留意的话很多网站在登录的时候密码会突然变长,那是输入的密码提交到服务器之后进行了加密的原因,有的人就会通过这个对你密码加密方式进行判断,所以我的建议就是尽量不要让用户看到加密后的密码。
在YII要防止这种情况只需先调用validate()方法再对密码进行加密,最后再save()即可。
作品中出现的bug#
承佐:
- 用存在的账号密码去注册会提示用户名已经存在,但不做修改只是将光标移到下一个框的时候提示就会消失
雄佳:
- 注册的时候表单验证没做好
- 用已经存在的账号密码去注册还会报错,让用户看到报错有时候会是致命性的
- 后台没做访问过滤