之间是否有其他优势或差异
$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攻击