PHP防止远程非法提交表单程序代码
发布:smiling 来源: PHP粉丝网 添加日期:2014-08-22 14:06:28 浏览: 评论:0
防止远程提交表单是一个防止黑客非法远程提交数据来给我们网站造成安全,下面我来介绍在php中防止远程非法提交表单实例.
具体方法
一、PHP防止站外提交数据的方法,代码如下:
- <?php
- $servername=$HTTP_SERVER_VARS['SERVER_NAME'];
- $sub_from=$HTTP_SERVER_VARS["HTTP_REFERER"];
- $sub_len=strlen($servername);
- $checkfrom=substr($sub_from,7,$sub_len);
- if($checkfrom!=$servername){
- echo("警告!你正在从外部提交数据!!请立即终止!!");
- exit;
- }
- ?>
把以上代码放到需要防止外部提交数据的页面中,如果是直接输入网址或者是从外部网部链接到本页,则显示:警告!你正在从外部提交数据,请立即终止,如果系从本站链接或通过表单提交到该页,则无此提示,这样做主要是为了防止一些伪造表单向站内提交数据 .
上面的代码通过curl可直接跳过了,我们可以参考dz论坛登录的一种做法.
处理远程表单提交更好的方式是,根据一个惟一的字符串或时间戳生成一个令牌,并将这个令牌放在会话变量和表单中,提交表单之后,检查两个令牌是否匹配,如果不匹配,就知道有人试图从表单的远程副本发送数据.
要创建随机的令牌,可以使用 PHP 内置的 md5()、uniqid() 和 rand() 函数,如下代码:
- <?php
- session_start();
- if ($_POST['submit'] == "go"){
- //check token
- if ($_POST['token'] == $_SESSION['token']){
- //strip_tags
- $name = strip_tags($_POST['name']);
- $name = substr($name,0,40);
- //clean out any potential hexadecimal characters
- $name = cleanHex($name);
- //continue processing....
- }else{
- //stop all processing! remote form posting attempt!
- }
- }
- $token = md5(uniqid(rand(), true));
- $_SESSION['token']= $token;
- function cleanHex($input){
- $clean = preg_replace("![][xX]([A-Fa-f0-9]{1,3})!", "",$input);
- return $clean;
- }
- ?>
- //开源代码phpfensi.com
- <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
- <p><label for="name">Name</label>
- <input type="text" name="name" id="name" size="20" maxlength="40"/></p>
- <input type="hidden" name="token" value="<?php echo $token;?>"/>
- <p><input type="submit" name="submit" value="go"/></p>
- </form>
没事把以前写的asp写出来,ASP防止外部提交数据的方法,代码如下:
- <%
- Server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
- Server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
- If mid(server_v1,8,len(server_v2))<>server_v2 then
- Response.write "警告!你正在从外部提交数据!!请立即终止!!"
- Response.End
- End if
- %>
Tags: PHP防止表单 PHP非法提交表单
- 上一篇:PHP验证码实现代码简单示例
- 下一篇:PHP防注入之程序里的敏感信息
相关文章
- ·php记录IP方式来防止表单重复提交(2014-09-21)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)