1

我想/正忙于完全重写我的整个网站。在这一点上,我正在研究我所谓的“成员和安全引擎”。我已经阅读了很多关于安全性和 SQL 注入的内容,而且非常复杂。附言。我的网站更像是一种爱好,而不是拥有约 250 多名会员的专业赚钱网站。

对于用户名和密码,我只允许使用字符 az、AZ 和 0-9。if(isset(post))我在-function中检查这个:

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或检索此信息时,是否还必须运行“ctype_alnum”检查$_session

附言。我是荷兰人,所以几乎我所有的表名、列名、表单输入字段名等都有一个荷兰语单词。我仍在努力,但是当站点完成后,您将不会在我的站点上找到“密码”、“通行证”、“用户”、“用户 ID”或任何类似的词。

4

2 回答 2

1

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

但是,对于防止 SQL 注入的最佳实践,回答您的问题的最佳地点是 OWASP:他们拥有许多用于通用方法和代码审查的大量资源,以及特定于语言的指南和库。

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

于 2013-05-23T16:55:14.700 回答
0
  1. 不,你不必这样做,这个变量是安全的。看看:信任 serverremot addr 是否安全
  2. 这取决于,您将不得不发布整个身份验证代码
  3. 通常一个好的做法是从数据库中选择每个用户,然后遍历他们并比较用户名/密码以找到匹配项。这样您就不需要在 SQL 语句中放置用户输入。
  4. 这取决于您如何处理这些内容
于 2013-05-23T16:59:07.920 回答