是否有益于另一个或差异
$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的输出是否可以安全使用?
答案 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攻击。