20150117--SQL注入+验证码类

image

回顾

会话技术:cookie和session

cookie:将数据保存到浏览器(HTTP协议设置响应头)

设置cookie:setcookie(名字,值,过期时间,作用域,域名);

读取cookie:$_COOKIE

session:将数据保存到服务器(默认是文件形式存在),依赖cookie(PHPSESSID=sessionid)

流程:开启session(session_start);$_SESSION处理数据(读和写);写入session/session_destroy

什么时候用cookie?什么时候用session?

数据安全性要求较高的使用session;安全性不高的就存放到cookie。

面试题:浏览器可以禁用cookie,session基于cookie实现。如果浏览器禁用了cookie,还能使用session吗?如果可以,如何实现?

session是基于cookie,需要cookie保存sessionid,如果禁用了cookie,session不能脱离cookie。如果用户在浏览器端自己禁用了cookie,用户得自己承担不能使用网站的责任。

可以模拟:

利用a标签的href,但是可以通过修改配置项,让系统自动的为a标签增加sessionID参数,并且session_start能自动去获取这些信息

修改配置文件

禁用只允许使用cookie保存sessionid 的配置

clip_image002

使用a标签的href属性来保存sessionid

clip_image004

效果1:系统自动为a标签增加sessionid

clip_image006

效果2:系统自动在session_start的时候从a标签中的url中获取sessionid

clip_image008

利用session_id和session_name函数,session_name获取PHPSESSID,session_id可以获取sessionid的值,还可以修改sessionid的值

clip_image010

记住用户登录信息

1. 在登录界面的时候,给用户提供一个表单选项,让用户能够选择是否记住用户信息。/admin/templates/login.html

clip_image012

checkbox:只有被勾选才会被提交,否则不会提交

2. 接收数据。/admin/privilege.php?act=check

clip_image014

3. 修改判断用户登录的逻辑。/admin/index.php

clip_image016

4. 通过保存的cookie帮助用户登录系统。/admin/index.php

clip_image018

5. 新增通过用户id获取用户信息的方法。/admin/includes/User.class.php

clip_image020

6. 接收执行结果,并进行判断。/admin/index.php

clip_image022

7. 登录成功要更新用户信息。/admin/index.php

clip_image024

8. 修改退出逻辑:用户如果主动点击退出,意味着希望下次不要直接登录,希望自己手动登录。/admin/privilege.php?act=logout

clip_image026

SQL注入

SQL注入:利用SQL语句的语法漏洞,以及程序员的操作漏洞,使用一组能够截断一条正常的SQL语句的数据,将数据拼凑到对应的SQL语句中,SQL语句就不能正常工作,从而实现破解。

万能密码:1’ or ‘1 = 1’; #

正常SQL语句

$sql = “select * from sh_user where u_username = ‘{$name}’ and u_password = ‘{$pass}’”;

SQL注入之后

select * from sh_user where u_username = ‘1’ or ‘1=1’;#’ and u_password = ‘345678’;

SQL注入防止

1. 将用户名和密码查询方式修改:使用用户名获取信息,然后在外部进行密码判断

$sql = “select * from sh_user where u_username = ‘{$name}’;

外部进行密码判断,必须密码一致才能成功。

2. 对数据进行特殊字符转义:引号,语句结束符,注释符

addslashes:增加转义符号

验证码

1. 什么是验证码?

验证码是用于判断人和机器的。机器能识别文字,不能识别图片,人能够轻而易举的将图片中的文字给识别处理。

验证:captcha:Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)

验证码逻辑:服务器在图片上保存一堆文字,用户选出图片上的文字,服务器比较两堆文字。

php本身不能处理图片,必须借助图片处理扩展。有很多扩展

clip_image028

加载图片扩展

加载GD扩展,当时在安装ecshop已经加载了gd扩展。

图片操作

1. 准备一张画布:长和宽

imagecreatetruecolor:创建一个指定长和宽的画布,返回一个图片资源

clip_image030

2. 在图片资源上进行操作:背景,文字,图片…

a) 背景:

图片如果要使用某种颜色,那么事先必须先分配颜色到该图片资源上,之后才能使用。

imagecolorallocate:给画布分配一个颜色,返回的是一个颜色句柄(整型)

int imagecolorallocate (图片资源, 红色整型, 绿色整型 , 蓝色整型 ),值的范围是0-255或者十六进制的0x00-0xff

分配背景色

imagefill:填充背景色

bool imagefill ( resource $image , 起始点x , 起始点y , 颜色 );从某个点开始,只要是相邻的且颜色一致的点都会被渲染

clip_image032

b) 文字:将一堆文字印在图片(在图片的某个位置写字)

imagestring:在指定图片资源的某个位置写字

bool imagestring ( resource $image ,字体1-5 ,起始x , 起始y , 要写的文字 , 文字颜色 )

clip_image034

3. 保存图片:输出和保存成文件

imagepng:将图片以png的格式输出

bool imagepng ( resource $image [, 文件名字 ] ):如果没有第二个参数,就是输出图片,如果有第二个参数就是保存图片

a) 输出图片

必须告诉浏览器当前返回结果的类型是图片类型:image/png

clip_image036

b) 保存图片

clip_image038

4. 释放资源

imagedestroy:释放制定的图片

clip_image040

原文地址:https://www.cnblogs.com/lifushan/p/5419457.html