PHP之旅8 URL与表单
表单
表单的出现让用户和后台主机有了直接的交互,网站开始变的‘动态起来’,在HTML的各个标记符中,与PHP关系最为紧密的要属表单标记符了,常见的表单标记符有<form>、<input>、<button>、<select>、<option>、<textarea>等,其中<form>标记符是表单中最基础最重要的标记符了。所有提交给后台的数据必须包含在<form></form>之间。其用法如下:
<form name="value" action="value" method="value">
</form>
其中 name 用来设置表单的命名,通过该命名,后台程序可以方便的访问表单数据。action属性用来设置表单处理程序的地址,一般为服务器端脚本文件(如PHP程序)或CGI程序的地址。method 属性用来定义数据从客户端浏览器传到服务器的传送方式,有两种:GET和POST。GET 传递方式是将表单数据添加到URL地址后面进行传递,不适合大数据的传递,因为有的浏览器会对信息的长度进行限制,太长的信息会被浏览器截断,从而导致信息的丢失。POST传递方式是将表单数据包含在表单主体中,一起传递给服务器,适合大量数据传输,而且不会在浏览器地址栏显示出表单数据,先对GET方来说比较安全,在不指定method属性,浏览器会默认使用GET方式传输表单数据。
get方法的实例:
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="GET">
用户名<input type="text" name="username"><br>
密码<input type="password" name="passwd"><br>
<input type="submit" name="submit" value="提交">
</form> <?php
if (isset($_GET['submit'])) {
echo "<br>";
echo '用户名:'.$_GET['username']."<br>";
echo "密码:".$_GET['passwd'].'<br>';
}
?>
在没点击“”提交“”之前的页面

主要看网址;在点击提交之后

网址改变了,并打印出了用户名和密码。
post方法的实例:
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="POST">
用户名<input type="text" name="username"><br>
密码<input type="password" name="passwd"><br>
<input type="submit" name="submit" value="提交">
</form> <?php
if (isset($_POST['submit'])) {
echo "<br>";
echo '用户名:'.$_POST['username']."<br>";
echo "密码:".$_POST['passwd'].'<br>';
}
?>
当没有点击“提交”之前

和get没有区别
当点击“提交”之后

从上面的比较可以看出POST和GET的区别,两个在提交之后的网址上看出来POST要比GET方法安全些。
注意:
此处使用的action="<?=$_SERVER['PHP_SELF'] ?>"存在xss攻击,
当打开localhost/mytest/index.php时构造一个script函数就可以进行攻击
不如这个,当请求http://localhost/mytest/index.php/%22%3E%3Cscript%3Ealert('xss')%3C/script%3E%3Cfoo时
页面会出现这种情况:

查看源代码会发现

action的值变为我们请求的地址了,这个是在写超全局变量时说过的,$_SERVER['PHP_SELF'] 这个函数会会原封不动的反映网址本身,由于html是一个标签类的语言,直接通过构造javascrip函数就可以进行xss攻击了。
解码之后的构造函数时:/"><script>alert('xss')</script><foo,
解决方法时1.用htmlentities($_SERVER[’PHP_SELF’])来替代简单的$_SERVER[’PHP_SELF’]
2.用$_SERVER[’REQUEST_URI’]来替代$_SERVER[’PHP_SELF’]
所以,form的action还是不要留空的好。第二点,除了PHP_SELF之外,其他的$_SERVER变量也许也会有类似的漏洞,比如SCRIPT_URI, SCRIPT_URL, QUERY_STRING, PATH_INFO, PATH_TRANSLATED等等,在使用他们之前一定要先作htmlentities之类的
PHP之旅8 URL与表单的更多相关文章
- 前端编程提高之旅(十)----表单验证插件与cookie插件
实际项目开发中与用户交互的常见手法就是採用表单的形式.取得用户注冊.登录等信息.而当用户注冊或登录后又须要记住用户的登录状态.这就涉及到经常使用的两个操作:表单验证与cookie增删查找. ...
- MVC系列学习(十)-生成URL与表单
本次学习,在路由配置信息中,有两个路由规则,在网站第一次启动的时候,注册了两个路由表 1.动态生成url A.在路由规则中,因为Default在前面,所以最新找到该路由表,此时不管 自己定义的控制器名 ...
- URL、表单数据、IP等处理类
<?php class ev { public $cookie; public $post; public $get; public $file; public $url; public $G; ...
- H5 表单
伴随着互联网富应用以及移动开发的兴起,传统的Web表单已经越来越不能满足开发的需求,HTML5在Web表单方向也做了很大的改进,如拾色器.日期/时间组件等,使表单处理更加高效. 1.1新增表单类型 - ...
- PHP新手入门1——表单
注:本身是Android,Android之前是java.但公司后台PHP特别多.就好奇php后台是怎么通过一个url给我数据的(完全不懂php).于是就学呗.学习系列随笔第一人称是一个Android小 ...
- jQuery异步表单提交
有时在A页面点击按钮弹出一个form表单,在填完表单后提交成功后,需要关闭表单页并将表单中的某些值反应在A页面上,这时就需要异步提交表单.其实也挺简单,只是需要把表单数据序列化. $("#f ...
- 表单提交---前端页面模拟表单提交(form)
有些时候我们的前端页面总没有<form></form>表单,但是具体的业务时,我们又必须用表单提交才能达到我们想要的结果,LZ最近做了一些关于导出的一些功能,需要调用浏览器默认 ...
- 读书笔记:《HTML5开发手册》Web表单
这是补充HTML5基础知识的第五篇内容,其他为: 一.HTML5-- 新的结构元素 二.HTML5-- figure.time.details.mark 三.HTML5-- details活学活用 四 ...
- HTML 表单元素、 输入类型、Input 属性
<input> 元素 最重要的表单元素是 <input> 元素. <input> 元素根据不同的 type 属性,可以变化为多种形态. 注释:下一章讲解所有 HTM ...
随机推荐
- 查询yum包安装路径
rpm -ql php71-php yum install json yum install libcurl
- Netty 零拷贝(一)NIO 对零拷贝的支持
Netty 零拷贝(二)NIO 对零拷贝的支持 Netty 系列目录 (https://www.cnblogs.com/binarylei/p/10117436.html) 非直接缓冲区(HeapBy ...
- vue的过滤器
Vue.Js 提供了强大的过滤器API,能够对数据进行各种过滤处理,返回需要的结果 vue的过滤器一般在JavaScript 表达式的尾部,由“|”符号指示: 过滤器可以让我们的代码更加优美,一般可以 ...
- Mybatis传值为空需要配置JdbcType来解决吗?(XML文件不需要配置JdbcType)
1,解决思路,配置自定义的语言驱动,重写自己的Paramethander package cn.com.servyou.gxdqy.tool.xmlhelper; import org.apache. ...
- MYSQL 问题小总结
mysql 问题小总结 1.MySQL远程连接ERROR 2003(HY000):Can't connect to MySQL server on ‘ip’(111)的问题 通常是mysql配置文件中 ...
- 2018.07.03 BZOJ 1007: [HNOI2008]水平可见直线(简单计算几何)
1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec Memory Limit: 162 MB Description 在xoy直角坐标平面上有n条直线L1,L2,-Ln, ...
- 2018.09.19 atcoder Snuke's Coloring(思维题)
传送门 谁能想到这道题会写这么久. 本来是一道很sb的题啊. 就是每次选一个点只会影响到周围的九个方格,随便1e9进制就可以hash了,但是我非要作死用stl写. 结果由于技术不够高超,一直调不出来. ...
- 2018.07.17 HAOI2016 找相同字符(SAM)
传送门 就是给两个字符串,让你求公共字串的个数. 本来大佬们都是用的广义后缀自动机,但我感觉后缀自动机已经可以做这道题了.我们对其中一个字串建出后缀自动机,然后用另外一个后缀自动机在上面统计贡献即可. ...
- python中的list和array的不同之处 及转换
python中的list和array的不同之处list是列表,可以通过索引查找数值,但是不能对整个列表进行数值运算 In [96]: b=[1,2] In [97]: b[1]Out[97]: 2In ...
- HTML中submit和button的区别
submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了. 如果表单在点击提交按钮后需要用JS进行处理(包括输入验证)后再提交的话,通常都必须把submit改成butt ...