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
可以值得一看的文章 :
PHP三层结构(上)——简单三层结构
PHP三层结构(下)——PHP实现AOP
在PHP方面已经挺不错了。
其实 在QEEPHP中,已经有实现了。不过没有想象中的那么好。
在第二篇 的文章中,我想过如何用插件来实现这些高级效果?那后来添加的插件又怎么实时加入系统?
QEEPHP和thinkPHP在后来已经有beforeAction,afterACtion。
thinkPHP在最早的model里也有beforeInsert,afterInsert之类的功能,用来处理数据验证。这其实已经有上面介绍的原型功能了。
过多的面向对象,虽然损失的效率,但对于业务逻辑处理来说,却比较方便了。
求职的朋友可以看看,不过也不要想着这些就一定有用,有时候工作中的经验也是非常重要的。不过,基本知识点还是非常重要的。至于高阶中的算法问题,如果你不是做特别重要的任务,这些算法你是碰不到的(做网游的除外);高阶中的像册处理,如果你真能处理好了,你单独做一个产品出售也不成问题啊。
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
前两天在面试的时候面试官就提出,数据库什么时候关闭比较好?是让他自已关闭还是主动在代码中关闭?
上次我在博客里提到xhprof是文锋的一次聚会,其中echo就提出了这个xhprof,轻量级,fackbook常用,当然echo他们用的也 很多。
说实话我在之前没有了解过xhprof,大多数情况下还是用xdebug,但在线上的时候,肯定是不敢开这样耗资源的玩意。所以就对xhprof关 心了一点点。再后来看了一点资料,同时echo那天也贴出了部分代码,也基本上是在用概率的方式提取LOG,或者指定某种具体条件的情况下记录,以节省资 源。
今天在闲逛的时候看到有人把中文手册翻译了。感慨万分,好久没有做过这种事情了。不是我太懒,而是真的做不来。
原文在这里:http://www.162cm.com/p/xhprofdoc.html
作者这样介绍自己:
翻译:徐仁禄 <xurenlu [at] gmail.com >
原文地址: http://mirror.facebook.net/facebook/xhprof/doc.html
初次翻译,大部分是google translate tookit工具给翻的,稍微修改了下。如遇错误,还请来信指出。谢谢!
» 阅读全文
PHP处理COOKIE是一件很方便的事情。print_r($_COOKIE)就可以打印所有的cookie变量。而且cookie也能够存为数组。确实操作和应用都非常方便 。
以前,对于子域和根域下的cookie并没有研究太深。因为都直接设在根域的。以前注意cookie是路径(path),这个的影响也是有的。不过现在大多数程序的cookie都是设在根路径(“/”)下,所以也回避了不少问题。
以下是老王提出的问题和解决方法(子域和根域同名cookie的处理),引伸开的话,你也可以测试一下,根路径与子路径下同名cookie的情况。【果然,老王文章结尾就是这样的提问,呵呵】
我们都知道,在子域下请求时,浏览器会把子域和根域下的Cookie一起发送到服务器,那如果子域和根域下有一个同名Cookie,当我们在PHP里使 用$_COOKIE访问时,到底生效的是哪个呢?下面做试验测试一下,测试使用Firefox,用到了以下插件:SwitchHosts+WebDeveloper+Firebug。
注意:试验结果可能因为浏览器的不同而存在差异。
首先通过SwitchHosts设定虚拟域名:www.foo.com,并且配置好Web服务器,当然,你手动设置Hosts文件也可以,我本意是为了多介绍几个工具。
然后编写设置Cookie的PHP脚本,先设置子域,再设置根域:
PHP代码
- <?php
- setcookie("bar", "www", time() + 10, "/", "www.foo.com");
- setcookie("bar", "foo", time() + 10, "/", ".foo.com");
- ?>
再编写浏览Cookie的脚本:
PHP代码
- <?php
- var_dump($_COOKIE);
- ?>
BTW:最初写脚本的时候我竟然在setcookie前使用了var_dump,也就是在发送请求头之前有了输出,犯了这样的初学者错误实在是罪过,可更令人惊讶的是脚本没有报错,查了半天原来是因为php.ini里缺省output_buffering = 4096。
先设置再浏览,就能看到结果了,结果显示有效的是子域下的Cookie。
重开一个浏览器窗口,并使用WebDeveloper删除Cookie,或手动删除,避免对结果造成影响。
然后调换两次调用setcookie的顺序,也就是先设置根域,再设置子域:
PHP代码
- <?php
- setcookie("bar", "foo", time() + 10, "/", ".foo.com");
- setcookie("bar", "www", time() + 10, "/", "www.foo.com");
- ?>
先设置再浏览,就能看到结果了,结果显示有效的是根域下的Cookie。
重复两次测试过程,并用Firebug记录下请求头的差异:
第一次先设置子域,再设置根域:请求头
Cookie的值是bar=www;bar=foo
,结果有效的是bar=www
第二次先设置根域,再设置子域:请求头
Cookie的值是bar=foo;bar=www,结果
有效的是
bar=foo
也就说,同名Cookie对于服务端PHP来说,在请求头Cookie中,哪个在前哪个生效,后面的会被忽略。
如果使用的不是Firefox,那就用不了Firebug,此时可以用PHP代码来检测Cookie头:
PHP代码
- if (isset($_SERVER['HTTP_COOKIE'])) var_dump($_SERVER['HTTP_COOKIE']);
以上的实验结论是基于Firefox而言的,由于不同的浏览器发送Cookie的策略可能有差异,所以在其他浏览器上结果可能会有所不同,比如在 Safari下就始终是子域有效,其他浏览器如Opera,Chrome等未仔细测试。鉴于这个混乱的结论,所以还是不要在子域和根域下使用同名 Cookie为好!
题外话:类似的情况,如子目录和根
目录
下的同名Cookie是什么情况,读者可以自行测试。
--EOF--
原文来自:http://hi.baidu.com/thinkinginlamp/blog/item/899551dacd807ad6b6fd48cd.html