2015-12-21 88 views
1

问题:有没有办法从获取请求中伪造值?

背景:

我写了一个简单的PHP脚本,我想是从在命令行或通过GET请求访问。如果通过命令行使用它,我可以调用名为php myScript.php variableValue的脚本。它目前的效果很好。但是,当从互联网上打电话时,我也需要一个安全码。使用这个伪代码,这些将是$_GET阵列中的值。

$_GET["variableValue"]="abcde"; 
$_GET["securityCode"]="IjfkeLEkf738J9("` 

要找出其中的脚本是从所谓的,我只是检查,看看数组的长度。如果它有多个元素,我用$ argv值来评估它。否则,我使用$_GET值进行评估。如果我使用$ argv值进行评估,那么我不检查securityCode,因此我的问题是$ argv是否可以从get请求中伪造。

回答

1

没有,。在较新版本的PHP中,它不应该是一个问题。在旧版本中,只要register_globals关闭,GET变量就不会自动转换为全局变量。

2

通过检查常量PHP_SAPI或使用php_sapi_name()函数,可以检测脚本是否从命令行调用。例如:

if (PHP_SAPI !== 'cli') { 
    $variableValue = $_GET["variableValue"]; 
    $securityCode = $_GET["securityCode"]; 
    // check the above values and deny access if they are not the right ones. 
} 
+0

我赞成你,因为这看起来是最好的方法,但我把GrandmasterB标记为正确,因为它是对问题标题的更直接回答。 – user3413723