保护PHP文件。允许仅从HTML表单发布变量

时间:2015-07-15 15:15:14

标签: javascript php jquery html ajax

我使用简单的HTML / AJAX / PHP脚本。

<form id="new_user" action="" method="post">
   <div class="col-md-3 form-group">
   <label for="username">Username</label>
   <input type="text" class="form-control" name="username" id="username" required>
   </div>
   <div class="col-md-3 form-group">
   <label for="city">City</label>
   <input type="text" class="form-control" name="city" id="city" required>
   </div>
   <input type="button" name="button1" value="Done" class="btn btn-success" onClick="aa();"></button>
</form>
<div id="d1"></div>

单击按钮时:

<script type="text/javascript">
function aa()
{
    var xmlhttp=new XMLHttpRequest();
        xmlhttp.open("POST","ins.php?username="+document.getElementById("username").value+"&city="+document.getElementById("city").value,false);
        xmlhttp.send(null);

        document.getElementById("d1").innerHTML=xmlhttp.responseText;;

}
</script>

我的ins.php文件:

<?php

$username_safe = htmlspecialchars($_GET['username']);
$city_safe = htmlspecialchars($_GET['city']);

echo $username_safe . " " . $city_safe;
?>

如何保护ins.php文件(甚至整个表单),以便客户端无法从URL字段发布变量,例如:http://www.example.com/ins.php?username=aaa&city=bbb

3 个答案:

答案 0 :(得分:0)

直接引用您的问题:

  

如何保护ins.php文件(甚至整个表单),以便客户端无法从URL字段发布变量,例如:http://www.example.com/ins.php?username=aaa&city=bbb

这已经完成,因为URL中的传递参数是GET请求,您已将表单设置为行中的POST提交表单:

<form id="new_user" action="" method="post">

所以只是不要看$_GET超全局数组。请改为$_POSTBetter yet use the filter_input() function correctly例如:$username_safe = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

答案 1 :(得分:0)

生成一个只在一定时间内有效的ID(例如15分钟)。使用php构建表单,并在<input type="hidden" value="<?=$id?>">

中包含此ID

将此ID发回服务器,并检查PHP是否允许此ID提交此表单。

答案 2 :(得分:0)

好像你是通过POST版GET发送你的vars,所以这真的不应该是一个问题。除非使用这些方法中的任何一种,您还可以将变量作为会话数据发送,但设置/取消设置会话变量会变得很麻烦。