一 :传统web服务和api服务器的区别
1;传统的web服务由nginx或者apache这种的中间件搭配web项目(php,java,go,python),在web项目当中包含html,css,js代码;返回会的是一个界面;
2,api服务器由nginx或者apache这种的中间件搭配web项目(php,java,go,python);没有资源文件(html,css,js)没有界面!,最大的区别是:API服务器返回的是JSON->{"code": 200,"msg":"登录成功"}
API服务器中前端和后端是分离的,后端的API服务器单独运行在一个服务器上(主机),界面的项目(HTML,CSS,JS)编写的项目存放在另一台服务器上(主域名解析在这个主机上),
NGINX(当作提供web服务的软件,能负载均衡(C语言编写))
二,SQL注入
### ///localhost/index.php?username=admin&password=123123
### $username = $_POST['username ']; //通过post协议获得参数的值;
### $sql=" select * from users where username = ' $username';";
### mysqli_real_escpail($username) //特殊字符进行转义\
### $mysqli->query($sql);
### echo $result;
1. SQL注入的理解
a. 数据交互的地方(比如上边的例子只有username在代码中进行交互,所以只有真正参与到数据交互的位置才能实现SQL注入)
b. 闭合
c. 拼接(在闭合后面插入自定义的SQL语句)
2. SQL注入的分类
基本思路: 1,确定数据交互的参数(id) 2,尝试闭合(" ')3.构造语句
a. 联合查询 ->1.确定列数(order by ?)(union select 1,2,3)
b. 报错注入->1.前提后端代码必须存在mysql_error()等报错函数,且必须存在网页中(updatexml,floor,extractvalue,polygon,geometrycollection,linestring,multipoint,multlinestring,multipolygon ,exp)
xml:(就是可以自定义标签的html)
200
uptatexml原理:第一个参数200
第二个xpath语法:/resp/code/
第三个位置:一个确切的值
eg:
select uptadexml('200
xml本体,xpath语法,要修改的值
0x7e波浪线只是链接符可以被替换比如{}
c.二次注入(一开始插入了恶意字符由与后端有防护并没有起到sql注入作用,但是这个值确确实实存在数据库里面,当项目下次在次使用这个参数时,参数拿出来时没有进行过滤,导致原有的单引号拼接到新的sql语句中去产生sql注入)->1,
d.堆叠注入->mysql_multi_query;可执行多条的独立的sql语句
e.宽字节注入->数据库使用的gbk编码;gbk编码中的转义编码为%5c 两个url编码会被识别为一个汉字从而造成单引号的逃逸,(/=%5c %df %5c可以组成一个汉字)
f.延迟注入->看不到回显的位置(利用if(length(select schema())=8#第一个位置为条件,sleep(5)#第二个位置为真输出的结果,sleep(0)#第三位值为假输出的结果)语句)
通过if语句和其他函数(substring,ascii,length,sleep())
g.布尔盲注 ->sql语句执行正确页面显示一个效果,执行错误显示另一个效果
盲注的利用手法:DNSLOG数据外带-利用mysql函数load_file() 去远程服务器上加载指定的资源从而实现数据外带;通常用来验证漏洞
三:sql注入怎么防范
1.转义
2.预编译(php(prepare预编译sql语句 ,bind_params给预编译的sql语句变量传值 ))(java PrepareStatementa类)
3.防火墙设备(WAF)
php开发:
1,$_GET[] $_POST[] $_SESSION[] $_COOKIE[]
2,序列化和反序列化,
a,序列化的意义
b,要能看清序列化的内容
c.能讲出来序列化和反序列化的名字(serialize)(unserialize)
三,文件包含
a,文件包含的意义
b,文件包含的本质——代码的复制
c,文件包含的长用函数有哪些,有那些区别?
require引入一个不存在的文件,会抛出错误,从而终止程序的运行
include引入一个不存在的文件,只会抛出警告,但不影响程序的运行
require_once或者include_once无论在同一个代码中出现多少次,都只会引入一次
PHP项目:
1.先明白PHP在web开发当中的便捷性,以上手,所以PHP成为早期WEB开发的首选
2.使用PHP实现登录功能,在代码层了解业务 (功能)实现原理
3.在代码层面学习Cookie和session身份认证机制
Cookie:
a.SQLITE数据库单文件,存放在客户端的浏览器目录下
b.浏览器每次请求域名都会自动携带该域名下对应的Cookie:(特性);将Cookie的值放在HTTP协议的头部(Cookie);
c.Cookie中的值以键值对的形式存在sessionid=??????;
d.服务端通过SET_Cookie这个函数为客户端设置对应的Cookie;
session
a.存放在服务端的某一个文件夹下,无后缀的文件;
b.文件名称就是SessionID;
c.session虽然不是一个数据库,但是可以以文本的形式查看,所以session文件中可以存放关键信息的;
Cookie和Session协作实现身份认证的机制是什么?
1.用户向服务器发起登录请求
2.服务器允许登录后,创建session,并将sessionid以set_cookie的方式设置到客户端的浏览器中的Cookies数据库中;
3,当用户再次访问该网站时,Cookie就会将该域名下对应的所有的Cookie,包括上一步中SET-cookie中设置的sessionid也带上 ;
4.服务端在请求包中获取Cookie中sessionid 查找服务端有没有和sessionid同名的sesion文件,并查看对应的session文件中是否包含登录的标记,如登录后会将用户名存放在session中,如果有,代表登录过,如果没有,代表没有登录过
发表评论