Php 使用isset的风险?

Php 使用isset的风险?,php,sanitization,Php,Sanitization,我是PHP新手 我被建议对$\u GET和$\u POST进行消毒。我一直遵循这个建议 但是,如果我只想用 if(isset($_GET['login'])) 我需要对它进行消毒吗 另外,我是否需要清理我使用的会话值?否。如果您只想检查变量是否存在,那么您的代码就可以了。否,这样做没有风险 在继续在业务逻辑中使用$\u GET/$\u POST中的值之前,需要进行清理(例如,使用它构建数据库查询或将其作为HTML输出的一部分显示给用户);这里您只是测试一个值是否存在。不,您没有。但更好的方法是

我是PHP新手

我被建议对
$\u GET
$\u POST
进行消毒。我一直遵循这个建议

但是,如果我只想用

if(isset($_GET['login']))
我需要对它进行消毒吗


另外,我是否需要清理我使用的会话值?

否。如果您只想检查变量是否存在,那么您的代码就可以了。

否,这样做没有风险


在继续在业务逻辑中使用
$\u GET
/
$\u POST
中的值之前,需要进行清理(例如,使用它构建数据库查询或将其作为HTML输出的一部分显示给用户);这里您只是测试一个值是否存在。

不,您没有。但更好的方法是:

if(key_exists('login',$_GET)) {
}

不,您不必进行任何类型的清理或任何操作:将允许您检查变量(或项目数组,在您的情况下)是否存在——基本上就是这样

在这里,当您测试项/变量是否存在时,您无法对其进行清理:要清理数据,您需要它存在


但是请注意:
isset()
将返回
false
,如果该项存在,但为
null


如果是
$\u GET
项目,则很可能不会发生这种情况。

我认为不需要卫生,如果只需要检查是否设置了密钥登录,最好这样做:


如果(数组\u键\u存在('login',$\u GET))


因为如果没有设置密钥,您的代码将抛出一个通知错误。

您只需要在将代码放入database@RaymondHo:不仅是数据库,而且是任何接受某种特殊形式输入数据的存储器/设备。@RaymondHo:不是这样。还有一些其他攻击向量需要输入数据清理(例如XSS)。@Raymond,在exec或其他程序中使用它怎么样?或者作为对象的动态值?如果键被设置但为null,则正如Pascal所说,isset返回false。一点也不好。如果$\u GET可以包含
null
值,可能更合适,但它不能。@TomášPlešek:实际上我非常确定
array\u key_存在
正是这样做的,测试
isset($array($key))
,因此,由于额外的函数调用,array_key_exists实际上可能会变慢。@TomášPlešek:来自$_GET的数据总是以字符串形式显示。所以没有可能的方法在那里传递
null
。@x3ro:请参见[example#2]。这很可能不会发生吗?为什么?@David19801:因为来自$\u-GET的每个值都是一个字符串,没有任何例外。@David创建了一个php脚本,其中只包含
var\u-dump($\u-GET)
并尝试让它显示一些内容
null
——您将看到;-)(哼,虫族比我快^^)@nikic:噢,抓得好。我希望我能对你的评论有所帮助;-)