检查表单是否已提交的最佳方法(php)

时间:2014-04-14 03:11:51

标签: php forms

我正在学习PHP,特别是如何保护php表单。

我正在阅读一篇名为" Sanitize and Validate Data with PHP Filters"其中作者使用以下代码检查表单是否已提交:

if (isset($_POST['Submit'])) {
  // do something...
}

哪种方法有效,但我已经知道最好使用输入过滤器(即filter_input)。

其次,使用filter_input也会阻止netbeans唠叨我没有"直接访问超全球$ _POST数组"

所以我写了以下内容:

function is_form_submit() {
    $request = filter_input(INPUT_SERVER, "REQUEST_METHOD");
    return $request === 'POST' ? true : false;
}

可以这样使用:

if ( is_form_submit() ) {
    // do something...
}

所以我的问题是:我的代码没有达到同样的效果吗?如果没有,为什么不呢?请指教。

2 个答案:

答案 0 :(得分:1)

虽然您的代码在大多数情况下会获得相同的结果,但它与isset调用不同。

您的代码所做的是检查REQUEST_METHOD是否为POST。也就是说,它会检查用户是否发出POST请求来访问当前页面。

isset所做的是检查名称为Submit的内容是否通过POST发送。这通常发生在您的提交按钮为<input name="Submit" type="submit" value="Submit" />时,因为点击该按钮(或点击输入文字字段并且它是第一个提交按钮)将导致$_POST['Submit']被设置。

要查看不同的行为,请将curl -X POST your-url.com/page.phpcurl -F Submit=submit your-url.com/page.php的结果进行比较。

答案 1 :(得分:1)

filter_input是未触及的用户输入。

有些脚本直接添加/修改$ _POST和$ _GET。如果您的代码是故障安全的,那很好,但是如果操作的键/值出现问题,则可能存在错误。

filter_input( INPUT_POST, 'requiredID' )

不受下面编码类型的影响

$_POST['requiredID'] = brokenFunction( $_POST['requiredID'] );