表单

表单的出现让用户和后台主机有了直接的交互,网站开始变的‘动态起来’,在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之类的

最新文章

  1. windows service 1053错误 启动失败
  2. jquery.zclip轻量级复制失效问题
  3. 事件流之事件冒泡与事件捕获&lt;JavaScript高级程序设计&gt;学习笔记
  4. Clock Skew , Clock Uncertainty和 Period
  5. 读懂Android项目结构目录
  6. oracle免安装客户端设置
  7. Arch命令行与安装包
  8. 【转】Swift开源项目精选
  9. Appnium安装——Mac篇
  10. HW3.5
  11. SQL 2005中char、nchar、varchar、ntext and nvarchar(max)的区别
  12. JDBC连接sql server数据库操作
  13. request的getServletPath(),getContextPath(),getRequestURI(),getRealPath(&quot;/&quot;)区别
  14. 你能选择出,前几个元素吗?使用纯css
  15. loadrunner中使用web_custom_request函数调用webservice接口
  16. spring使用中ModelAttribute的内容被覆盖
  17. Appium升级后安装UnicodeIME-debug.apk 提示
  18. super限定,子类中系统查找变量的顺序:
  19. 使用MS的ScriptDom来拆解TSQL脚本
  20. 不停mysql服务添加从库的两种方式

热门文章

  1. UI小白如何快速提升自己
  2. 2018.10.22 bzoj4380: [POI2015]Myjnie(区间dp)
  3. 2018.07.30 bzoj4355: Play with sequence(线段树)
  4. hdu-1877(大数+进制转换)
  5. Ubuntu 16.04安装MySQL及遇到的问题解决方案
  6. aused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;sessionFactory&#39; defined in class path resource [applicationContext.xml]: Invocation of init method fai
  7. css3美化滚动条样式
  8. Android APK反编译步骤
  9. (连通图)Network--POJ--3694
  10. Oracle SQL性能优化技巧大总结