php
  • css
  • tags
  • xss
  • 2017-01-17 40 views 0 likes 
    0

    人可以帮我加入用htmlspecialchars防止XSS在此代码:用htmlspecialchars在PHP

    <?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>'; 
        } 
    ?> 
    

    我不知道往哪里放他们,这应该是在开机自检功能吧?

    +0

    XSS预防措施通常发生在未输入的信息输出上。但是,如果你想确保这两个post值在输入到数据库时没有html chars,你可以通过htmlspecialchars传递它们。 – MarkSkayff

    +0

    是啊我想要做那个标记,但是你知道我怎样才能将它们添加到我的脚本中吗?我不确定把它们放在哪里。 – IbraDigga

    +0

    $ ts = htmlspecialchars($ _ POST ['ts']);并且对于用户变量相同。 – MarkSkayff

    回答

    0

    与替换$ TS和$用户线:

    $ts=htmlspecialchars($_POST['ts']); 
    $user=htmlspecialchars($_POST['user']); 
    

    然后独自离开了查询,那么它会在剥离价值的htmlspecialchars使用mysql_real_escape_string()

    +0

    谢谢帕特里克,我已经取代了两条线。我应该在这个脚本中添加更多内容还是足够了? – IbraDigga

    +0

    这是坏建议。您将HTML转义为您放入数据库的值,然后,当您将其从数据库中取出时,您不确定屏幕输出(回显)函数是否需要转义。始终将“原始”值保存在内存中,并在输出/插入到数据库等时进行转换,然后不会感到困惑。 – Robbie

    +0

    所以你不同意帕特里克? – IbraDigga

    0

    你需要使它安全使用取决于你想要做什么不同的功能:

    当输出到HTML,使其“HTML安全”在htmlspecialchars包装。

    echo 'Writing to browser ' . htmlspecialchars($_POST['t']); 
    

    当您输出到SQL时,通过将其转义为sql来使其成为“sql安全”(请参阅​​下面的注释)。

    $sql = 'UPDATE table SET field="' . mysql_escape_string($_POST['t']); 
    

    当您输出到一个URL时,通过转义为url来使其成为“网址安全”。

    $link = 'http:/example.com?value=' . urlencode($_POST['t']) 
    

    类似的规则适用于JSON编码,输出到XML等


    注意MySQL的:你是正确的逃跑,但你使用的是PHP中不再存在的功能(你因此使用PHP的旧版本)。请在手册中检查mysqlipdo,然后使用这些功能。

    +0

    感谢罗比,我知道这是一个旧的,但我目前的主机使用旧版本,我会尽快更新!我改变了两个变量,你认为这足够吗? – IbraDigga

    +1

    mysqli和PDO已经存在了10年以上;即使任何主机上的“旧”版本的PHP都应该拥有它们。他们不会在一两年内拥有mysql()。所以现在转换,以免你学习一个无效的课程。 – Robbie

    +0

    另请参阅我对Patrick的回答的评论:如果您将html转义并插入数据库,您可能会失去跟踪哪些值已被转义以及哪些值没有转义。因此,在输入/插入数据库时​​,保留“原始”值并进行转义/转换;那么你遵循一个总是逃避输出的简单规则,而不需要有选择地去做。当您稍微使用模板引擎时,它也会使转换更容易。 – Robbie

    相关问题