PHP中的htmlspecialchars
有人能帮我添加htmlspecialchars以防止代码中出现XSS吗:PHP中的htmlspecialchars,php,css,tags,xss,Php,Css,Tags,Xss,有人能帮我添加htmlspecialchars以防止代码中出现XSS吗: <?PHP if(isset($_POST['update'])) { $ts=$_POST['ts']; $user=$_POST['user']; mysql_query("UPDATE users SET block_newfriends='". mysql_real_escape_string($ts). "' WHERE username='"
<?PHP
if(isset($_POST['update'])) {
$ts=$_POST['ts'];
$user=$_POST['user'];
mysql_query("UPDATE users SET block_newfriends='". mysql_real_escape_string($ts). "' WHERE username='" .mysql_real_escape_string($user) . "'");
echo '<div class="rounded-container">';
echo '<div class="rounded-green rounded-done">';
echo '<b>reload</b><br>';
echo '</div>';
echo '</div>';
}
?>
将$ts和$user行替换为:
$ts=htmlspecialchars($_POST['ts']);
$user=htmlspecialchars($_POST['user']);
然后将查询放在一边,它将在htmlspecialchars stripped值上使用mysql\u real\u escape\u string()
。您需要使用不同的函数来确保安全,这取决于您想做的事情:
当您输出到HTML时,使用htmlspecialchars
包装,使其“HTML安全”
echo 'Writing to browser ' . htmlspecialchars($_POST['t']);
当您输出到SQL时,通过将其转义为SQL使其“SQL安全”(请参见下面的注释)
当输出到URL时,通过对URL进行转义使其“URL安全”
$link = 'http:/example.com?value=' . urlencode($_POST['t'])
类似的规则适用于JSON编码、输出到XML等
关于mySQL的注意事项:您转义它是正确的,但是您使用的是PHP中不再存在的函数(因此您使用的是旧版本的PHP)。检查手册中的或,改用这些功能。XSS预防措施通常发生在信息输出而不是输入时。但是,如果你想确保这两个post值在输入到数据库时没有html字符,你可以通过htmlspecialchars传递它们。是的,我想做这个标记,但是你知道如何在我的脚本中添加它们吗?我不知道放在哪里。$ts=htmlspecialchars($\u POST['ts');用户变量也是如此。防止XSS攻击:。此外,<代码> MySQL<函数易于SQL注入,为了防止您应该考虑使用马克,我已经改变了这两个变量。我需要添加更多吗?谢谢Patrick,我已经替换了两行。我应该在这个脚本中做/添加更多还是足够?这是一个糟糕的建议。您将对输入到数据库中的值进行html转义,然后,当您将其从数据库中取回时,您不确定是否需要对屏幕输出(echo)函数进行转义。始终将“原始”值保存在内存中,并在输出/插入数据库时进行转换等,这样您就不会感到困惑。谢谢Robbie,我知道这是一个旧版本,但我当前的主机使用的是旧版本,我将很快更新!我改变了这两个变量,你认为这足够了吗?mysqli和PDO已经存在了10年以上;即使是任何主机上的“旧”版本的PHP也应该有它们。一两年后,他们不会有mysql()。所以,现在转换以避免学习无效类。另请参阅我对Patrick答案的评论:如果您使用html转义,然后插入到数据库中,您可能会忘记哪些值已转义,哪些值未转义。因此,将“原始”值保存在手中,并在输出/插入数据库时进行转义/转换;然后遵循一个简单的规则,即总是为输出转义,而不需要有选择地进行转义。当您使用模板引擎时,这也会使转换更容易。
$link = 'http:/example.com?value=' . urlencode($_POST['t'])