在学习如何制作安全但易于维护的PHP注册表单时,我从哪里开始呢?


Where do I start when learning how to make a secure but easy to maintain PHP registration form?

我最近一直在寻找一段时间,但不能真正找到一个安全的注册表格。我找到的所有东西都有"open for XSS""Open for SQL injections"之类的评论。我知道这些攻击意味着什么以及它们是如何完成的(至少主要是如何完成的),但是找到一个安全的向导或已经存在的形式比我想象的要难。我能找到的最好的是一个PDO,工作得很好,但最后作者写道,它不应该用于更大的项目(找不到链接,抱歉)。

在我昨天开始搜索之前,我用这个表格写了一张我想要的东西的清单。如最小密码长度,确认密码等。我希望我能找到一种容易理解的形式,我可以以此为基础并从中学习。

有人可以张贴一个基本的安全PHP或PDO脚本,易于使用,并给我一些关于我应该或不应该做什么信息?

我建议使用CodeIgniter或Laravel等框架来保护自己免受XSS和SQL注入。框架为您提供有用的库,助手和数据库连接器。
但最终你所要做的就是验证网站的每个条目,并在创建SQL查询时绑定参数。
要验证邮件,您可以使用来自filter_var:

的邮件过滤器
if(!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
  echo("$email is a valid email address");
} else {
  echo("$email is not a valid email address");
}

或者直接使用正则表达式:

if(filter_var($string,FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/(('w)@('w)'.('[a-z]{2-4}/")))){
    echo 'Valid Email';
} else {
    echo 'invalid email';
}

然后对于数据库,只需准备语句并绑定参数。

$stm = mysqli_prepare('SELECT password FROM user WHERE email = ?')
$stm->bind_param('s', $email); // s for String
$stm->execute();

我建议去看看这些主题,这里有几个网站。
PHP官方文档
W3School on Mysqli
关于filter_var的官方PHP文档
W3School on filter_var
Regex101学习regexp

注:我写的邮件的regexp不是最好的。