SQL注入按提交方式可分为三类:GET、POST、Cookie。
注入提交方式的分类主要是根据后台代码处理请求方法的方式
ASP:request (全部接受)、request.querystring (接受get)、request.form(接受post)、request.cookie(接受cookie)
PHP:$_REQUEST(全部接受)、$_GET 、$_POST(接受post)、S_COOKIE(接受cookie)
$_GET不是取get请求携带的数据,而是取的查询参数数据
其他语言,看开发框架,不同的框架,提取http请求数据的写法或者说函数不同。
php中$ _request与$ _post、$ _get用于接受表单数据。
$ _request与$ _post、$ _get的区别和特点
php中$ _request可以获取以POST方法和GET方法提交的数据,但是$ _request[]比较慢。
通过post和get方法提交的所有数据都可以通过$ _REQUEST数组获得.
$_REQUEST
php中$_REQUEST可以获取以POST方法和GET方法提交的数据,但是速度比较慢
$_GET
用来获取由浏览器通过GET方法提交的数据。GET方法他是通过把参数数据加在提交表单的action属性所指的URL中,值和表单内每个字段一一对应,然后在URL中可以看到,但是有如下缺点:
安全性不好,在URL中可以看得到
传送数据量较小,不能大于2KB。
$_POST
用来获取由浏览器通过POST方法提交的数据。POST方法他是通过HTTP POST机制,将表单的各个字段放置在HTTP HEADER内一起传送到action属性所指的URL地址中,用户看不到这个过程。他提交的大小一般来说不受限制,但是具体根据服务器的不同,还是略有不同。相对于_GET方式安全性略高。
GET 和POST的区别
可见方面、安全方面
在客户端,GET通过URL提交数据,数据在URL中可以看到,在HTTP 头部传输的。
POST提交的数据放置在HTML HEADER内提交,在URL不能看见,在HTTP 请求的内容里传输,POST比GET更安全。
缓存方面
GET请求能缓存,页面后退时,不产生影响,GET可以保留浏览器历史记录
POST请求不能缓存,页面后退时,会重新提交请求,POST不能保留浏览器历史记录
方向方面
POST 是用来向上放东西的,POST的信息作为HTTP 请求的内容。
GET是用来从服务器取东西的,GET也能够向服务器传送较少的数据,而这些数据只是用来服务器需要什么样的数据。
请求数据包方面、数据大方面
GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据),提交的数据最多2-16k。
POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据),POST没有限制数据大小。
注
get是从服务器上获取数据,post是向服务器传送数据。
get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。
post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
get安全性非常低,post安全性较高。
举例:mypage?id=1这种就是GET方式传值,可以用$ _request和$ _get接受传值。
DET提交
一般直接通过浏览器地址栏提交
POST提交
数据在地址栏看不到
Cookie提交
通过cookie往后台提交数据,后台去除cookie中的数据,如果直接和数据库打交道,那么就是一个注入点。
MySQL变量和函数
mysql的变量有很多:
mysql> show global variables;
# select @@version_compile_os;
mysql的内置函数也有很多:
user();
version();
database();
以上均为自己学习所得,如有错误的地方,欢迎评论指正。