Submitted by gouki on 2010, July 5, 7:20 AM
PHP的新手在开发的时候不可避免的会遇到SQL注入的问题,很多老手在介绍的时候是叮嘱叮嘱再叮嘱啊。其实有个简单的方法就可以减少这种问题的过失。
1、rewrite 规则
2、很多框架的路由
这两种方式都是将GET方法做了一个简单正则处理,也只有符合规则的情况下,GET值才会被赋值到变量中。如果将ID等做一个\d的判断,那么非数字的已经经过一次过滤了。
而且,你在采用rewrite规则的时候,很多sql语句就无法通过URL被传递进来,因为他们不能被正则正常解析。
当然,你也可以想象,如果你的URL是1-0-0-1-0-1-0-1-1-1.html你能知道这些位数是干嘛的不?这种情况用于搜索比较常见,因为搜索的条件会比较复杂,也会比较容易被用来做注入。
如果根据ID取文章之类的,你show-1-1.html别人是知道你的ID为多少,但已经不太容易注入了吧?
新手只是要学习一下rewrite规则了。了解一下正则也好HOHO
Tags: 注入, rewrite
PHP | 评论:0
| 阅读:15995
Submitted by gouki on 2010, July 4, 10:27 AM
可以值得一看的文章 :
PHP三层结构(上)——简单三层结构
PHP三层结构(下)——PHP实现AOP
在PHP方面已经挺不错了。
其实 在QEEPHP中,已经有实现了。不过没有想象中的那么好。
在第二篇 的文章中,我想过如何用插件来实现这些高级效果?那后来添加的插件又怎么实时加入系统?
QEEPHP和thinkPHP在后来已经有beforeAction,afterACtion。
thinkPHP在最早的model里也有beforeInsert,afterInsert之类的功能,用来处理数据验证。这其实已经有上面介绍的原型功能了。
过多的面向对象,虽然损失的效率,但对于业务逻辑处理来说,却比较方便了。
Tags: aop
PHP | 评论:1
| 阅读:17787
Submitted by gouki on 2010, July 3, 1:19 PM
说起来郁闷,godaddy的购物车我真的不知道怎么清空,以至于我刚买的qqapi.com被强制续费了一年,虽然钱没多少,但是不爽啊。
最近又想注册一个域名,可是发现购物车里不知何时又多了一个域名。一下子愣在那里了,于是去google搜索了一下“清空godaddy购物车”,还真的发现了不少与我有同样问题的朋友。
原来,godaddy的购物车清空是在提交订单页面的,首页的购物车弹出窗中没有remove了(记得最早的时候有remove,后来不知道怎么就没有了)。
在提交订单页的表单右下角,居然有一个链接“Empty Cart”。激动啊。终于可以清空godaddy的购物车了。
看来,我还是不够细心,不过从这里我也感觉godaddy是不是有什么想法?这样明显没有用户体验的功能也放在网上,真想不通?难道是逼着你买?
在国内,用户体验越来越被提上日程,连老王也写了表单的用户体验改进的文章:增加表单可用性之提示文字,为什么老外却越来越忽视呢?
顺便,大量更新了godaddy的优惠码,都是7.49左右的。好象现在没有比这个更低的了,以前我是有过对折的。。链接在:godaddy优惠码
Tags: godaddy, 购物车
Misc | 评论:1
| 阅读:21886
Submitted by gouki on 2010, July 3, 9:14 AM
求职的朋友可以看看,不过也不要想着这些就一定有用,有时候工作中的经验也是非常重要的。不过,基本知识点还是非常重要的。至于高阶中的算法问题,如果你不是做特别重要的任务,这些算法你是碰不到的(做网游的除外);高阶中的像册处理,如果你真能处理好了,你单独做一个产品出售也不成问题啊。
1. 基本知识点
- HTTP协议中几个状态码的含义:503 500 401 200 301 302。。。
- Include require include_once require_once 的区别.
- PHP/Mysql中几个版本的进化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改进等等。
- HEREDOC介绍
- 写出一些php魔幻方法;
- 一些编译php时的configure 参数
- 向php传入参数的两种方法。
- (mysql)请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别;
- error_reporting 等调试函数使用
- 您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
- posix和perl标准的正则表达式区别;
- Safe_mode 打开后哪些地方受限.
- 写代码来解决多进程/线程同时读写一个文件的问题。
- 写一段上传文件的代码。
- Mysql 的存储引擎,myisam和innodb的区别。
2. web 架构,安全,项目经验
- 介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验。
- 使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时,重定向到index.php?id=567 ,请先打开mod_rewrite.
- MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
- 写出一种排序算法(原理),并说出优化它的方法。
- 请简单阐述您最得意的开发之作
- 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
- 您是否用过模板引擎? 如果有您用的模板引擎的名字是?
- 请介绍Session的原理,大型网站中Session方面应注意什么?
- 测试php性能和mysql数据库性能的工具,和找出瓶颈的方法。
- 正则提出一个网页中的所有链接.
- 介绍一下常见的SSO(单点登陆)方案(比如dedecms整合discuz的passport)的原理。
- 您写过的PHP框架的特点,主要解决什么问题,与其他框架的不同点。
- 大型的论坛/新闻文章系统/SNS网站在性能优化上有什么区别?
- 相册类应用:要求在浏览器中能同时选中并上传多个文件,图片要求能剪裁,压缩包在服务器端解压。能上传单个达50M的文件。上传过程中有进度条显示。每个图片能生成四种大小缩略图,视频文件要转成flv供flash播放。叙述要涉及的各类开源软件和简单用途。
- 一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…, 如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。
3. unix/linux 基本使用
- linux下查看当前系统负载信息的一些方法。
- vim的基本快捷键。
- ssh 安全增强方法;密码方式和rsa key 方式的配置。
- rpm/apt/yum/ports 装包,查询,删除的基本命令。
- Makefile的基本格式,gcc 编译,连接的命令,-O0 和-O3区别。
- gdb,strace,valgrind的基本使用.
4. 前端,HTML,JS
- css盒模型。
- javascript中的prototype。
- javascript中this对象的作用域。
- IE和firefox事件冒泡的不同。
- 什么是怪异模式,标准模式,近标准模式。
- DTD的定义
- IE/firefox常用hack.
- firefox,IE下的前端js/css调试工具。
原文来自http://www.162cm.com/archives/972.html
前两天在面试的时候面试官就提出,数据库什么时候关闭比较好?是让他自已关闭还是主动在代码中关闭?
Tags: php, 面试
PHP | 评论:1
| 阅读:24417
Submitted by gouki on 2010, July 2, 9:58 PM
一个简单的例子,是懒宝宝让我帮忙的。因为我自己也注意到了,radio在选中后,一般无法取消,查了一下google,发现还是有方法 的。因此,立马解决了:
XML/HTML代码
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
- <table class="rs" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td>HIV :阴
- <input type="radio" name="hiv[0]" value="HIV:阴" union="yin"/>
- 阳
- <input type="radio" name="hiv[0]" value="HIV:阳" union="yang" /></td>
- <td>梅毒:阴
- <input type="radio" name="hiv[1]" value="梅毒:阴" union="yin" />
- 阳
- <input type="radio" name="hiv[1]" value="梅毒:阳" union="yang" /></td>
- <td>疱疹:阴
- <input type="radio" name="hiv[2]" value="疱疹:阴" union="yin" />
- 阳
- <input type="radio" name="hiv[2]" value="疱疹:阳" union="yang" /></td>
- <td>淋病:阴
- <input type="radio" name="hiv[3]" value="淋病:阴" union="yin" />
- 阳
- <input type="radio" name="hiv[3]" value="淋病:阳" union="yang" /></td>
- </tr>
- <tr>
- <td>非淋:阴
- <input type="radio" name="hiv[4]" value="非淋:阴" union="yin" />
- 阳
- <input type="radio" name="hiv[4]" value="非淋:阳" union="yang" /></td>
- <td>湿疣:阴
- <input type="radio" name="hiv[5]" value="湿疣:阴" union="yin" />
- 阳
- <input type="radio" name="hiv[5]" value="湿疣:阳" union="yang" /></td>
- <td>丙肝:阴
- <input type="radio" name="hiv[6]" value="丙肝:阴" union="yin" />
- 阳
- <input type="radio" name="hiv[6]" value="丙肝:阳" union="yang" /></td>
- <td><a style="cursor:pointer;" id='allyin'>全阴</a> <a style="cursor:pointer;" id='allyang'>全阳</a> <a id='allempty' style="cursor:pointer;">重填</a>
- <script>
- $(function(){
- $('#allyin').click(function(){
- $(':input[union="yin"]').attr('checked','checked');
- });
- $('#allyang').click(function(){
- $(':input[union=yang]').attr('checked','checked');
- });
- $('#allempty').click(function(){
- $(':input[union=yang]').each(function(){
- $(this).attr('checked','checked');
- var tmp = $(this)[0];
- tmp.checked = false;
- tmp = null;
- })
- });
- });
- </script></td>
- </tr>
- </table>
因为用jquery的话,选中radion的方法很方便。所以,就尝试用这种方式解决了。。。但是用jquery无法取消checked状态,只能用原生js的方式才行(jquery是把元素都转换为对象,而不是DOM对象)
Tags: jquery, radio, checked
Javascript | 评论:1
| 阅读:37787