输出/插入后期数据的良好实践方法

时间:2016-04-05 10:28:19

标签: php string sanitization

是否有益于另一个或差异

$start = htmlspecialchars(strip_tags(date('Y-m-d H:i:s', mktime($_POST['shours'], $_POST['smins'], 0, $_POST['smonth'], $_POST['sday'], $_POST['syear']))));

$end = date('Y-m-d H:i:s', mktime(htmlspecialchars(strip_tags($_POST['hours'])), htmlspecialchars(strip_tags($_POST['mins'])), 0, htmlspecialchars(strip_tags($_POST['month'])), htmlspecialchars(strip_tags($_POST['day'])), htmspecialchars(strip_tags($_POST['year']))));

如果只有很少的参数,我用来插入PDO准备好的execute($array(containing above strings and some others)或bindparams语句。 如果插入成功,上面的行也会输出回用户。

我不确定你是否需要这样做:

$output = htmlspecialchars($output); 
echo $output;

或低于平均水平?

htmlspecialchars($output);
echo $output;

从现在开始,$ output的输出是否可以安全使用?

1 个答案:

答案 0 :(得分:1)

当您使用PDO Prepared语句时,查询通常是安全的。通常我的意思是,如果您绑定参数而不直接在查询中使用它们。

例如,如果这是您的查询:" INSERT INTO users(name)VALUES(:name)"并绑定:name与用户输入。这是安全的做法。

但是,如果您使用此查询" INSERT INTO用户(姓名)VALUES(' $ User_Input_Directly')"。现在这是不安全的,因为用户输入可以包含引号的结尾并操纵查询。

不构建

htmlspecialchars 来保护查询中的变量。它仅用于将特殊字符转换为HTML实体。例如,如果您不想在输入中转换任何HTML代码,那么您可以使用此代码,但这并不意味着它会在查询中为您提供任何保护,因为它不会转换引号,除非您使用ENT_QUOTES作为旗。对于测试,您可以在php文件中执行这两个代码并查看区别:

$Var = "<b>Hello World</b>";
echo $Var; //without htmlspecialchars the text will become bold
echo htmlspecialchars($Var); //the text will show as it is without html bold format.

当你想在查询中使用变量时,不要使用htmlspecialchars。而是使用PDO预处理语句或使用mysql_real_escape_string。

输出变量时,htmlspecialchars可以防止XSS和Javascript攻击。