这个登录结构对SQL注入安全吗?


Is this login structure safe from SQL injection?

我想/我正忙着完全重写我的整个网站。在这一点上,我正在研究我所谓的"成员和安全引擎"。我读了很多关于安全性和SQL注入的文章,它们非常复杂。ps.我的网站更像是一个业余爱好,而不是一个专业的赚钱网站,大约有250多个会员。

对于用户名和密码,我只允许字符a-z, a-z和0-9。我在if(isset(post)) -函数中检查了这一点:

if(ctype_alnum(mysql_real_escape_string(stripslashes($string))) == false) {
    header to error-page; exit;}
else {continu with script}

对密码和用户名都进行检查。

当有人试图用未知的用户名或已知的用户名用错误的密码登录时,该操作将被记录(插入)在一个特殊的表中,包括IP地址。在使用未知用户名尝试登录10次或使用错误密码尝试6次后,IP地址将被阻止进入会员区,并且在所有非会员页面上,表单和提交的表单都不显示,并且由于此IP块而不可用。我甚至在提交表单时将这个ip-check作为一行…如果IP在表中,报头(指向错误页);退出;。

我的问题:

  • 我必须做安全检查时,我把IP地址在一个字符串?$xip = $_SERVER['REMOTE_ADDR'];这个$xip是当尝试以未知用户或用户登录时插入到表中密码错误
  • 这是一个(相当)安全的环境,对黑客和SQL注入?
  • 如果不是吗?我真的很感谢帮助和建议(在这里写下完整的解决方案是非常感谢的,但我学到了很多更多,当你给我正确的解决方案的路径)
  • 当我从$_cookie$_session检索此信息时,我是否还必须运行"ctype_alnum"检查?

p。我是荷兰人,所以几乎我所有的表名,列名,表单输入字段名等等都有荷兰语。我还在努力,但当网站完成后,你不会发现单词"密码","通过","用户","用户id",或任何类似的在我的网站。

在MySQLi或PDO中使用准备好的语句是必须的,这是防止SQL注入的第一步,并且mysql_*命令无论如何都是不赞成的。

但是,回答你关于防止SQL注入的最佳实践的问题的最佳地方是OWASP:他们有许多关于通用方法和代码审查的优秀资源,以及特定于语言的指导方针和库。

https://www.owasp.org/index.php/Guide_to_SQL_Injectionhttps://www.owasp.org/index.php/Reviewing_Code_for_SQL_Injection

    不,你不必这样做,这个变量是安全的。看一下:信任服务器远程地址是安全的吗?
  1. 这取决于,你将不得不张贴整个认证码
  2. 通常一个好的做法是从数据库中选择每个用户,然后迭代它们并比较用户名/密码以找到匹配。这样就不需要在SQL语句中放置用户输入。
  3. 这取决于你如何处理这些
  4. 的内容