在PHP中,这足以保证通过单击表单提交按钮提交表单并验证发布的内容是否为空?
if($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST['field_data']))
{
echo "ok";
}
答案 0 :(得分:2)
我认为,可能有办法确保使用您的表单提交表单 如果我愿意,我想我会做这样的事情:
$secure = $_SESSION['form']['submit'] = MD5(time());
<form>
<input type='hidden' name='secure_form' value='<?php echo $secure ?>' />
</form>
然后提交时检查值:
if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['secure_form']) && $_SESSION['form']['submit'] == $_POST['secure_form']) {
//do stuff
}
当然,您必须在页面顶部添加session_start()
!
答案 1 :(得分:1)
我倾向于使用隐藏的表单字段
<?php
$csrf_token = md5(time().'random string');
$_SESSION['csrf'] = $csrf_token;
?>
<input type="hidden" id="submitted" name="submitted" value="yes"/>
<input type="hidden" id="csrf" name="csrf" value="<?php echo $csrf_token; ?>"/>
然后在我的PHP中我会使用类似的东西:
if($_SERVER['REQUEST_METHOD']=='POST' && $_POST['submitted'] == 'yes' && $_POST['csrf'] == $_SESSION['csrf']){
// Do something
echo 'Form submitted via POST';
}
已更新为包含CSRF字段
答案 2 :(得分:1)
首先你需要检查$_SERVER['REQUEST_METHOD']
输出,以便最好的方法来转换上面的输出
if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') {
然后您可以使用提交按钮名称进行检查,如
<input type="hidden" id="submitted" name="submitted" value="yes"/>
if(strtoupper($_SERVER['REQUEST_METHOD'])=='POST' && isset($_POST['submitted']) && $_POST['submitted'] == 'yes'){
您也可以查看将由isset()
或empty()
提交的所有表单值