post 与 get区别
重点:
*.post传输数据时,不需要在url中显示出来,而get方法要在url中显示。
*.post传输的数据量大,可以达到2m,而get方法由于受到url长度的限制,只能传递大约1024字节.
*.post顾名思义,就是为了将数据传送到服务器段,get就是为了从服务器段取得数据。而get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据。post的信息作为http请求的内容,而get是在http头部传输的。
详细说明:
1、get 通过 url 请求来传递用户的数据,将表单内各字段名称与其内容以成对的字符串连接,置于 action 属性所指程序的 url 后, 数据都会直接显示在 url 上,就像用户点击一个链接一样;
post 方法通过 http post 机制,将表单内各字段名称与其内容放置在 html 表头(header)内一起传送给服务器端交由 action 属性能所指的程序处理,该程序会通过标准输入(stdin)方式,将表单的数据读出并加以处理
2、 get 方式需要使用 request.querystring 来取得变量的值。
post 方式通过 request.form 来访问提交的内容。
3、 get 方式传输的数据量非常小,一般限制在 2 kb 左右,执行效率却比 post 方法好;
post方式传递的数据量相对较大,它是等待服务器来读取数据,也有字节限制,这是为了避免对服务器用大量数据进行恶意攻击。
建议:除非你肯定你提交的数据可以一次性提交,否则请尽量用 post 方法
4、 get 方式提交数据,会带来安全问题,表单提交建议使用 post 方法;(比如登陆页面,通过 get 方式提交数据时,用户名和密码出
现在 url 上,如果页面可以被缓存或者其他人可以访问客户这台机器,就可以从历史记录获得该用户的帐号和密码)
post 方法提交的表单页面常见的问题是,该页面如果刷新的时候,会弹出对话框。建议:出于安全性考虑,最好使用 post 提交数据
5、get限制form表单的数据集的值必须为ascii字符;而post支持整个iso10646字符集。
6、get是form的默认方法。
http协议里面,四个表示操作方式的动词:get、post、put、delete。它们分别对应四种基本操作:
get用来获取资源
post用来新建资源(也可以用于更新资源)
put用来更新资源
delete用来删除资源。
php通过post/get获得数据会自动转义
根据服务器的不同配置,在通过post、get获得数据时可能出现一些类似于 ',等特殊符合会被转义。这个问题主要由php魔术引号引起。php魔术引号包括 magic_quotes_gpc,magic_quotes_runtime,magic_quotes_sybase。
magic_quotes_gpc 总结如下:
1. 对于magic_quotes_gpc=on的情况,
我们可以不对输入和输出数据库的字符串数据作
addslashes()和stripslashes()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
关于php注入中的magic_quotes_gpc magic_quotes_gpc = on
大家都知道php配置文件php.in ,如果里面的magic_quotes_gpc 配置被打开 那就是magic_quotes_gpc = on 懂点php的人都知道。
那我们就要对数值型的字段注入。
1 2if ( isset($_post[f_login] ) ){ 3//连接数据库 4$t_struid = $_post[f_uid]; 5$t_strpwd = $_post[f_pwd]; 6$t_strsql = select * from tbl_users where uid=$t_struid and password = '$t_strpwd' limit 0,1; 7if ( $t_hres = mysql_query($t_strsql) ){ 8// 成功查询 9 }10 }11 ?>
1html> 2head> 3title>sample testtitle> 4head> 5body> 6form method=post action=> 7 user id: input type=text name=username size=30>br> 8 password: input type=text name=userpwd size=30>br> 9input type=submit name=user_login value=登录>10form>11body>
如果正确输入:
select * from tbltable_users where userid=admin and password = 'admin' limit 0,1
如果攻击者在username处,输入:admin or 1 =1 #,则注入的sql语句如下:
select * from table_users where userid=admin or 1 =1 # and password = 'admin' limit 0,1
下面就可以进行注入了.
在php.ini 中把display_errors 选项设为display_errors = off 这样就可以防止.
magic_quotes_runtime
如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 php 中的默认值为 off。
magic_quotes_sybase
如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ”。而双引号、反斜线 和 null 字符将不会进行转义。
由于不同服务器的配置不同,需要在代码中用get_magic_quotes_gpc() 检测服务器配置。
1if(isset($_post['c'])){2$s = $_post['c'];3if(get_magic_quotes_gpc())4$s = stripslashes($s);//stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。5//do something6 }
以上就介绍了php基础之post与get,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。