输出/插入帖子数据的良好做法


Good practice way to output / insert post data

之间是否有其他优势或差异

$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从现在起可以安全使用吗?

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

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

但是,如果使用此查询"INSERT INTO users(name)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.

因此,当您想在查询中使用变量时,不要使用htmlspecialchar。相反,请使用PDO准备的语句或使用mysql_real_eescape_string。

输出变量时,htmlspecialchar将保护您免受XSS和Javascript攻击