十一·如何进行防止SQL注入?
1·表单尽量用post提交,核心用户验证都用post,表单判断使用get,因为get比post快
2·使用$_SERVER[HTTP_REFERER]判断提交表单的源头是否是本机域名
$path = $_SERVER['HTTP_REFERER']; $arr = parse_url($path); $arr2= $arr['host']; echo "<pre>"; print_r($arr2);
3·php.ini开启addslashes,防止用户输入信息有单引号或者双引号对sql语句带来的破坏性,开启之后会在单双引号之前加反斜杠\’\”
4·密码需要设置md5或Sha1加密
5·服务器本身的安全(web + mysql)
十二·防止盗链?
1·服务器上防止盗链:
Apache 和Nginx做rewrite基于源来做判断阻止盗链
Apache设置防盗链方法:(.htaccess文件)
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ [NC] RewriteCond %{HTTP_REFERER} !linuxidc.cn [NC] RewriteCond %{HTTP_REFERER} !google.com [NC] RewriteCond %{HTTP_REFERER} !baidu.com [NC] RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,NC,L] RewriteRule ^(.*)$ http://image.linuxidc.cn/image/$1 [L]
不是以上网站访问来源就直接转向:
RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,NC,L]
Nginx设置防盗链方法:(/usr/local/nginx/conf/nginx.conf文件)
location ~ .*\.(jpg|gif|png|bmp|swf|jpeg)$ { expires 30d; valid_referers none blocked *.linuxidc.cn *.google.com *.baidu.com; if ($invalid_referer) { rewrite ^/ ; return 404; } }
2·代码防止盗链:
$_SERVER[‘HTTP_REFERER’]
十三·用php写出一个安全的用户登录系统需要注意哪些方面?
1·验证码
2·U盾
3·动态口令卡
4·限制登录次数
5·使用数字键盘
6·密码不能粘贴
7·网址使用ssl,服务器证书https
8·注册验证必须要使用php验证
9·以post提交给后端php程序
十四·使用过哪些php框架,试着描述其优劣点?
Thinkphp:
ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架。它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,各方面都比较人性化,熟悉J2EE的开发人员相对比较容易上手,适合php框架初学者。 ThinkPHP的宗旨是简化开发、提高效率、易于扩展,其在对数据库的支持方面已经包括MySQL、MSSQL、Sqlite、PgSQL、 Oracle,以及PDO的支持。ThinkPHP有着丰富的文档和示例,框架的兼容性较强,但是其功能有限,因此更适合用于中小项目的开发。
优点:
1.易于上手,有丰富的中文文档;
2.框架的兼容性较强,PHP4和PHP5完全兼容、完全支持UTF8等。
3. 适合用于中小项目的开发
缺点
1.对Ajax的支持不是很好;
2.目录结构混乱,需要花时间整理;
3.上手容易,但是深入学习较难。
Yii:
Yii 是一个基于组件的高性能php框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了 今日Web 2.0应用开发所需要的几乎一切功能。事实上,Yii是最有效率的PHP框架之一。
优点
1·纯OOP
2·用于大规模Web应用
3·模型使用方便
4·开发速度快,运行速度也快。性能优异且功能丰富
5·使用命令行工具。
缺点:
1·对Model层的指导和考虑较少
2·文档实例较少
3·英文太多
4·要求PHP技术精通,OOP编程要熟练!
5·View并不是理想view,理想中的view可能只是html代码,不会涉及PHP代码。
Lavarel:
优点
Laravel 的设计思想是很先进的,非常适合应用各种开发模式TDD, DDD 和BDD,作为一个框
架,它准备好了一切,composer 是个php 的未来,没有composer,PHP 肯定要走向没落。
laravel 最大的特点和优秀之处就是集合了php 比较新的特性,以及各种各样的设计模式,
Ioc 容器,依赖注入等。
缺点
基于组件式的框架,所以比较臃肿
CodeIgniter:
优点:
推崇“简单就是美”这一原则。没有花哨的设计模式、没有华丽的对象结构,一切都是那么简单。几行代码就能开始运行,再加几行代码就可以进行输出。可谓是“大道至简”的典范。 配置简单,全部的配置使用PHP脚本来配置,执行效率高;具有基本的路由功能,能够进行一定程度的路 由;具有初步的Layout功能,能够制作一定程度的界面外观;数据库层封装的不错,具有基本的MVC功能. 快速简洁,代码不多,执行性能高,框架简单,容易上手,学习成本低,文档详细;自带了很多简单好用的library,框架适合小型应用.
缺点:
本身的实现不太理想。内部结构过于混乱,虽然简单易用,但缺乏扩展能力。 把Model层简单的理解为数据库操作. 框架略显简单,只能够满足小型应用,略微不太能够满足中型应用需要.
评价:
总体来说,拿CodeIgniter来完成简单快速的应用还是值得,同时能够构造一定程度的layout,便于模板的复用,数据操作层来说封装的不 错,并且CodeIgniter没有使用很多太复杂的设计模式,执行性能和代码可读性上都不错。至于附加的library 也还不错,简洁高效。
十五·用过哪些版本控制工具?
svn subversion 版本控制
github 版本控制
十六·进制转换?
对照表:
1 1 1 1 1 1 1 1(二进制)
128 64 32 16 8 4 2 1(十进制)
例如:
(二进制转换为十进制) 101010111 = 1×2^8 + 1×2^6 + 1×2^4 + 1×2^2 + 1×2^1 + 1×2^0 = 256+64+16+4+2+1 = 343
(十六进制转换为十进制) 3A5B=3×16^3 + Ax16^2 + 5×16^1 + Bx16^0 = 3×4096 + 10×256 + 80 + 11×1 = 12288+2560+80+11=14939
(十六进制转换为二进制) 41=0100 0001
16进制的1位数代表2进制的4位数
(二进制转换为十六进制) 11010110 = B6
四个数为一组(1101)= 1×2^3 + 1×2^2 + 1×2^0 = 13=B,(0110)= 1×2^2 + 1×2^1 = B6
(十进制转换为二进制) 13=1101
余数=被除数-除数*商
13/2(商6 余数1),
6/2(商3 余数0),
3/2(商1 余数1),
1/2(商0 余数1)
规律:不断除以2,保留余数,商为0时不再除以2,将所有余数倒序排列。
(十进制转换为十六进制) 138=8A
138/16(商8 余数10 A),
8/16(商0 余数8)
规律:不断除以16,保留余数,商为0时不再除以16,将所有余数倒序排列。
$int = 1+2+"23+4" = 26; ascii码转换: chr(65) == A; ord(A) == 65; $a = array(1=>5,5=>8,22,2=>'8',81); $a[7] == 81 //前一个最大下标加2 $a[6] == 81 //前一个最大下标加1 $a[3] 不存在,空 $a[bar] = 'hello'; $a[bar] 和 $a['bar'] 结果一样hello;
位运算:
echo 1>>0; // 001 ==>1 echo 2>>1; // 010 ==> 001 => 1 二进制向右移动1位,结果转十进制 echo 3<<2; // 011 ==> 01100 => 1x2^3+1x2^2=12 二进制向左移动2位,结果转十进制
echo 可以打印多个参数,print不可以
十七·下面能正确输出yellow的结果有哪些:
$fruits = array('apple' =>'red','banana' =>'yellow'); echo "A banana is {$fruits[banana]}"; echo "A banana is {$fruits['banana']}"; echo "A banana is $fruits[banana]"; heredoc: $str=<<<str this is string str; echo $str;
以上等同于$str=”this is string”;
十八·什么是面向对象,主要特征是什么?
也就是我们常说的OOP,以对象为中心的程序设计思维或者方式,好处是有两个成员组成,成员属性和成员方法,提高代码重用性,避免代码冗余度
三大特征:封装,继承,多态
十九·session和cookie的区别是什么,请从协议,产生的原因与作用说明?
cookie数据存放在客户端的浏览器上,session数据放在服务器上,
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session,
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE,
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,
将登陆信息等重要信息存放为SESSION, 其他信息如果需要保留,可以放在COOKIE中
二十·HTTP状态中的200,302,304,403,404,500代码含义?
200:成功访问,并返回数据
302:重定向
304:缓存未过期
403:服务器拒绝访问,Apache权限拒绝访问
404:访问的页面不存在
500:服务器内部错误
linux压缩:
tar czf text.tar.gz test.php
linux解压:
tar xzf test.tar.gz