登录:
$username = mysql_real_escape_string(htmlspecialchars(strip_tags(trim($_POST['username'])), ENT_QUOTES));
$password = mysql_real_escape_string(htmlspecialchars(strip_tags(trim($_POST['password'])), ENT_QUOTES));
为了插入数据,我重复使用相同的mysql_real_escape_string(htmlspecialchars(strip_tags(trim(...
我觉得这是不好的做法,因为我使用了很多功能......这是防止mysql注入的正确方法吗?防止xss注入?还是完全落水?一切正常,没有什么破坏 - 我的问题是,我是否在使用配对时过时的东西?是否只有一个我应该用于工作的功能?
感谢。
答案 0 :(得分:2)
mysql_real_escape_string应该足够了......你应该检查用户注册的其他地方
答案 1 :(得分:2)
如果我使用<mysecretpassword>
作为密码该怎么办?
它将被删除,任何人都可以像我一样登录。
我认为您应该按原样存储用户名和密码,并且仅在显示时才htmlspecialchars
。
strip_tags
这样的用户名,否则 BlaBla aka Yada-Yada <C00lHax0r>
似乎根本不需要
答案 2 :(得分:1)
您确实可以防止MySQL注入,但您存储的字符串与其原始格式不同。 当你拉出字符串OUT并回显它时,应该使用strip_tags,htmlspecialchars和trim等函数。
原因是,有时您可能希望将字符串保留为其原始格式,以便您可以,例如,只删除一些标记,而不是所有标记 - 或者您可能只想使用htmlspecialchars而不剥离任何标记。关键是能够在显示字符串时轻松转换字符串。 这意味着,您需要将字符串保持为原始格式。为了做到这一点 - 你没有strip_tags或htmlspecialchars-it。
另一件事是,每个人和他们的祖父母都在使用PDO,你可能想开始玩它,因为它确实让你免受SQL注入。
答案 3 :(得分:1)
strip_tags
没有必要。
为了编码舒适性,您可能需要为此创建一个函数:
function escape_everything($something)
{
return mysql_real_escape_string(htmlspecialchars(strip_gpc(trim($something)), ENT_QUOTES));
}
function strip_gpc($something)
{
return get_magic_quotes_gpc() ? stripslashes($something) : $something;
}
但这种方法存在一些问题。它只适用于您发送到数据库的数据,更重要的是,您正在保存数据html编码。如果您将来想要从数据库中保存的数据生成PDF,则首先需要htmlspecialchars_decode(),因此可能有点不方便(但很容易解决)。
答案 4 :(得分:1)
以下是大多数答案的建议。
$username = mysql_real_escape_string(trim($_POST['username']));
$password = md5("mysalt".mysql_real_escape_string(trim($_POST['password'])));