有人可以帮助我在此代码中添加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='" .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>';
}
?>
我不知道把它们放在哪里,它应该在POST功能中吗?
答案 0 :(得分:0)
将$ ts和$ user行替换为:
$ts=htmlspecialchars($_POST['ts']);
$user=htmlspecialchars($_POST['user']);
然后单独保留查询,然后在htmlspecialchars剥离的值上使用mysql_real_escape_string()
。
答案 1 :(得分:0)
根据您的目的,您需要使用不同的功能使其安全:
当您输出到HTML时,请将其设为&#34; html-safe&#34;通过包裹htmlspecialchars
。
echo 'Writing to browser ' . htmlspecialchars($_POST['t']);
输出到SQL时,使其成为&#34; sql-safe&#34;通过转义为sql(参见下面的注释)。
$sql = 'UPDATE table SET field="' . mysql_escape_string($_POST['t']);
当您输出到网址时,请将其设为&#34;网址安全&#34;通过转发它来获取网址。
$link = 'http:/example.com?value=' . urlencode($_POST['t'])
类似的规则适用于JSON编码,输出到XML等。
关于mySQL的注意事项:你是正确的逃避它,但你正在使用PHP中不再存在的函数(因此你使用的是旧版本的PHP)。检查手册中的mysqli或pdo,然后使用这些功能。