Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的htmlspecialchars_Php_Css_Tags_Xss - Fatal编程技术网

PHP中的htmlspecialchars

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='"

有人能帮我添加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>';
    }
?>

将$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'])