zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    bzoj violet系列 (2708~2725)
    bzoj4692: Beautiful Spacing
    896.Montonic Array
    56. Merge Intervals
    767. Reorganize String
    872. Leaf-Similar Trees
    使用Spring MVC开发RESTful API(续)
    690. Employee Importance
    429. N-ary Tree Level Order Traversal
    使用Spring MVC开发RESTful API
  • 原文地址:https://www.cnblogs.com/lifushan/p/5419457.html
Copyright © 2011-2022 走看看