来自 计算机编程 2019-12-29 05:22 的文章
当前位置: 澳门威尼斯人平台 > 计算机编程 > 正文

禁止站外提交表单(author:killer)

使用asp尽量减少服务器端的工作量,这样就应该多使用javascript,把所有提交字段使用javascript或vbscript检测后提交给服务器,这样服务器就不必再作检测,而在提交时可能会有人修改script从本地提交,这样存在安全提交的问题,所以应该要求从服务器断路径提交,其他地址提交提交无无效:%server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))ifmid(server_v1,8,len(server_v2))server_v2thenresponse.write"brbrcentertableborder=1cellpadding=20bordercolor=blackbgcolor=#EEEEEEwidth=450"response.write"trtdstyle='font:9ptVerdana'"response.write"你提交的路径有误,禁止从站点外部提交数据请不要乱该参数!"response.write"/td/tr/table/center"response.endendif%比如说上面的代码起名为check_path.asp保存,每次遇到表单提交时引用就行了:!--#includefile="check_path.asp"--

有时我们需要在表单真正提交之前,做一些检查工作,检查通过之后再进行提交。

例子一,我们每一次打开提交页面生成一个token然后保存在session中,当表单提交时我们来判断当前的token值与session是否一致,如果是的就是正常提交否则就是无效提交了。

<form name="myForm" onsubmit = "validateMyForm(event);">

<script type="text/javacript">
function validateMyForm(event)
{
    event.preventDefault();
    if (条件) {
        alert("验证失败!");
        return false;
    }

    return true;
}
</script>

代码

直接 return false 和 preventDefualt() 的区别在于,return false 其实做了三件事:

 代码如下

  1. 调用 event.preventDefualt() 停止浏览器的默认行为(表单提交),
  2. 调用 event.stopPropagation() 阻止事件继续传播,
  3. 立即停止脚本执行,立即返回。
    在大多数我们使用 return false 的地方,其实只需要 preventDefualt()。

<?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;    
}    
?>    
<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>

本文由澳门威尼斯人平台发布于计算机编程,转载请注明出处:禁止站外提交表单(author:killer)

关键词: