Php 在登录和注册时使用htmlspecialchars

Php 在登录和注册时使用htmlspecialchars,php,Php,我试图保护我的网站免受xss攻击,为此我使用了htmlspecialchars和mysqli_real_escape_字符串 现在我尝试让用户登录并注册,而他仍然可以使用之类的标志 我使用以下代码作为用户名: 通过注册: $username = mysqli_real_escape_string($mysql,$_POST['username']); $username = strtolower($username); $username = htmlspecialch

我试图保护我的网站免受xss攻击,为此我使用了htmlspecialchars和mysqli_real_escape_字符串

现在我尝试让用户登录并注册,而他仍然可以使用之类的标志

我使用以下代码作为用户名: 通过注册:


    $username = mysqli_real_escape_string($mysql,$_POST['username']);
    $username = strtolower($username);
    $username = htmlspecialchars($username);

及登入:


    $username = mysqli_real_escape_string($mysql,$_POST['username']);
    $username = strtolower($username);
    $username = htmlspecialchars(htmlspecialchars($username));
    echo "Username: $username<br>";

当我尝试登录时,它会显示密码或用户名不正确!, 但是登录时的echo与数据库中的用户名完全匹配

首先,我在登录时只使用了一个htmlspecialchars,但它只会回显用户名,不会更改任何内容,我无法登录


有人知道我怎么做吗?

不要在数据库中保存HTML编码的用户名。用户名应与数据库中保存的用户名相同,因为这是用户想要使用的用户名。您还可以使用此值与类似的登录进行比较。。。其中username=?。为了登录/注册/查找/比较,必须始终使用htmlspecialchars和html_解码,这会让你头疼

当您使用数据库中的用户名值并希望在您选择的媒体上输出它时,您可以使用您选择的媒体的转义机制。例如,要在HTML中输出值,可以使用htmlspecialchars等函数。这意味着,当用户使用用户名iluvuYou注册时,不需要mysqli_real_escape_字符串来避免xss,这是防止SQL注入的一种不好的方法。首选使用prepared语句shtmlspecialChars仅在您计划显示字符串或将其输出到html时才有用。事实上,没有一个用例可以用来验证字符串。
&lt;script&gt;alert(\'2\')&lt;/script&gt;
echo "Username: ".htmlspecialchars($username)."</br>";