你应该在isset()和empty()之前或之后使用htmlspecialchars()吗?

时间:2016-02-17 06:31:42

标签: php

我想知道在安全性和实用性方面什么是正确的程序。在检查变量是否已设置并为空之前,您是否应该对变量使用htmlspecialchars()?

示例:

在使用或存储帖子数据时使用htmlspecialchars():

$field = $_POST['field'];
if(isset($field)){
    //store or use: htmlspecialchars($field);
}

或者你应该在检索帖子数据时使用htmlspecialchars():

$field = htmlspecialchars($_POST['field']);
if(isset($field)){
    //store or use: $field
}

这可能是一个愚蠢的问题,但我想知道哪个是正确的。

2 个答案:

答案 0 :(得分:5)

好吧,这样想吧。为什么我们首先使用isset?答案是保护我们的代码不要试图用不存在的东西做事。

例如,在控制台中使用php -a,您可以看到:

php > $temp
php > echo htmlspecialchars($temp);

Parse error: parse error in php shell code on line 2
php >

显然,您不希望代码抛出解析错误。因此,您需要先检查该值是否存在(使用isset),然后使用该值执行操作。

答案 1 :(得分:0)

如果要使条件完全安全,则应同时使用isset和empty,因为isset检查是否定义了变量,并且对变量值的空检查是否为空。 所以你应该使用像这样的if条件,

$field = $_POST['field'];
if(isset($field) && !empty($field)){
    //store or use: htmlspecialchars($field);
}