此PHP注册代码中是否存在任何安全漏洞?

此PHP注册代码中是否存在任何安全漏洞?,php,sql,security,Php,Sql,Security,你能给我一些关于这个代码的想法吗?我错过了什么安全漏洞? 你能看到任何潜在的威胁吗?我能做得更好吗 我还在学习:)谢谢 你没有输入密码 此外,md5()被考虑用于散列密码 改用。您没有输入密码 此外,md5()被考虑用于散列密码 请改用。我假设您是在https上提供此服务的,尽管您没有提及您是否提供服务——如果您没有,用户名和密码将在开放网络上清晰地传递,这肯定不是很安全 这里有一个竞争条件——首先检查用户名是否已被使用,然后才插入。至少应该使用一个事务,理想情况下,只要尝试插入(使用数据库施加

你能给我一些关于这个代码的想法吗?我错过了什么安全漏洞? 你能看到任何潜在的威胁吗?我能做得更好吗

我还在学习:)谢谢

你没有输入密码

此外,
md5()
被考虑用于散列密码

改用。

您没有输入密码

此外,
md5()
被考虑用于散列密码


请改用。

我假设您是在https上提供此服务的,尽管您没有提及您是否提供服务——如果您没有,用户名和密码将在开放网络上清晰地传递,这肯定不是很安全


这里有一个竞争条件——首先检查用户名是否已被使用,然后才插入。至少应该使用一个事务,理想情况下,只要尝试插入(使用数据库施加的唯一性约束)并捕获重复的错误即可。而且,只有在进行了所有其他健全性检查之后,你才应该这样做,即,当你确信,除了可能的重复之外,注册尝试是可以的。

我假设你是在https上提供此服务的,尽管你没有提到你是否这样做——如果你没有,用户名和密码在开放网络上以透明的方式传播,这肯定不是很安全


这里有一个竞争条件——首先检查用户名是否已被使用,然后才插入。至少应该使用一个事务,理想情况下,只要尝试插入(使用数据库施加的唯一性约束)并捕获重复的错误即可。而且,只有在所有其他的健康检查之后,也就是说,当你确信除了可能的重复之外,注册尝试没有问题。

Little会给你带来很多麻烦,因为你没有检查用户名的有效性。

Little会给你带来很多麻烦,因为你没有检查用户名的有效性。

你需要修改密码

这个放错地方了。在使用$\u POST变量之前,将其上移几行

// remove eventuakl space
foreach($_POST as $key => $val) $_POST[$key] = trim($val);
您正在无缘无故地转义密码字段。它们没有被发送到数据库。md5($password)将进入数据库,并且不会转义


编辑:在登录端,您应该在注册端修剪任何要修剪的内容。

您需要修改密码

这个放错地方了。在使用$\u POST变量之前,将其上移几行

// remove eventuakl space
foreach($_POST as $key => $val) $_POST[$key] = trim($val);
您正在无缘无故地转义密码字段。它们没有被发送到数据库。md5($password)将进入数据库,并且不会转义


编辑:在登录端,您应该修剪注册端修剪的任何内容。

您应该使用参数,而不是动态构建sql。它将有助于防止sql注入攻击。小bobby表可以满足您的需要。

您应该使用参数,而不是动态构建sql。它将有助于防止sql注入攻击。小bobby表会帮你的。

你的错误检查出了问题。我将按以下顺序执行错误检查:

  • 检查是否有空字段
  • 检查字段是否具有有效值(筛选输入)
  • 在SQL中使用字段之前,请使用mysql\u real\u Escape\u字符串对字段进行转义
  • 检查SQL表中的用户
  • 如果发现错误,请不要继续进一步检查。保护每个错误检查,类似于最终INSERT语句上的保护

    除了使用mysql\u real\u escape\u字符串外,您没有对密码字段进行编辑吗


    在使用mysql\u real\u escape\u字符串之前,应该先进行mysql\u连接。mysql\u real\u escape\u字符串将使用连接来确定连接的字符集。字符集将标识要转义的字符。

    您的错误检查顺序错误。我将按以下顺序执行错误检查:

  • 检查是否有空字段
  • 检查字段是否具有有效值(筛选输入)
  • 在SQL中使用字段之前,请使用mysql\u real\u Escape\u字符串对字段进行转义
  • 检查SQL表中的用户
  • 如果发现错误,请不要继续进一步检查。保护每个错误检查,类似于最终INSERT语句上的保护

    除了使用mysql\u real\u escape\u字符串外,您没有对密码字段进行编辑吗


    在使用mysql\u real\u escape\u字符串之前,应该先进行mysql\u连接。mysql\u real\u escape\u字符串将使用连接来确定连接的字符集。字符集将确定要转义的字符。

    要添加此内容,请阅读此关于salt的内容以了解其重要性:要添加此内容,请阅读此关于salt的内容以了解其重要性:有关种族条件的信息足够真实,但除非是财务或处理潜在的身份盗窃数据,使用HTTPS可能有点过火。关于种族状况,这是真的,但除非是财务或处理潜在的身份盗窃数据,否则使用HTTPS可能有点过火。他确实逃过了,但是的,应该有一个精神检查,因为他可能不会逃过其他地方……这是真的,他可能在那里做过,但是,由于在任何地方都没有提到它,如果安全是一个问题,那么冗余总是比较安全的。他确实逃避了它,但是的,应该有一个精神检查,因为他可能不会在其他地方逃避它……这是真的,他可能在那里做过,但是,由于在任何地方都没有提到它,因此,如果出于安全考虑,冗余总是比较安全的。这是您的注册码。这还不到一半。你的登录码在哪里?您是否有适当的措施来处理失败的登录尝试?这是您的注册码。这还不到一半。你的登录码在哪里?你有什么办法来处理失败的登录尝试吗?他使用的是PHP的ext/mysql API,它不支持SQL参数。他确实用我的
    // remove eventuakl space
    foreach($_POST as $key => $val) $_POST[$key] = trim($val);