maisto/phpauth

PHP网站的安全用户认证类,使用强大的密码哈希系统和攻击拦截,以保护您的网站和用户安全。

dev-master 2017-09-19 10:39 UTC

This package is not auto-updated.

Last update: 2024-09-18 21:06:05 UTC


README

Stories in Ready Build Status ghit.me Minimum PHP Version

PHPAuth

这是什么

PHPAuth 是一个安全的PHP网站用户认证类,使用强大的密码哈希系统和攻击拦截来保护您的网站和用户。

PHPAuth 是一个正在开发中的项目,不适用于编程知识不丰富的人。我们无法帮助每个人,因为他们不理解这个类。

这不是初学者的项目!

功能

  • 通过电子邮件和密码组合进行认证
  • 使用 bcrypt 对密码进行哈希,这是一种安全的算法,它使用一个昂贵的密钥设置阶段
  • 为每个用户使用一个独特的128位盐值,从 /dev/urandom 中获取,使得彩虹表变得无用
  • 使用PHP的 PDO 数据库接口,并使用预处理语句,这意味着一个高效的系统,对SQL注入具有抵抗力
  • 根据门户上的失败操作次数和任何定义的时间后,通过IP阻止(或验证)攻击者
  • 系统不会发送或存储明文密码
  • 可以轻松集成到大多数现有网站中,并可以作为新项目的良好起点
  • 轻松配置多个系统参数
  • 允许通过SMTP或sendmail发送电子邮件
  • 阻止注册时使用一次性电子邮件地址

用户行为

  • 登录
  • 注册
  • 激活账户
  • 重新发送激活邮件
  • 重置密码
  • 更改密码
  • 更改电子邮件地址
  • 删除账户
  • 登出

要求

  • PHP 5.4
  • MySQL / MariaDB 数据库或PostGreSQL数据库

Composer 支持

PHPAuth 现在可以使用以下命令安装

composer require phpauth/phpauth

然后: require 'vendor/autoload.php';

配置

数据库表 config 包含多个参数,允许您配置类的某些功能。

  • site_name:在激活和密码重置电子邮件中显示的网站名称
  • site_url:Auth根的URL,您在其中安装了系统,不带尾随斜杠,用于电子邮件。
  • site_email:用于发送激活和密码重置电子邮件的电子邮件地址
  • site_key:一个随机字符串,您应该修改,用于验证cookie以确保它们未被篡改
  • site_timezone:正确的日期和时间值的时区
  • site_activation_page:在激活电子邮件中附加到 site_url 的激活页面名称
  • site_password_reset_page:在密码重置电子邮件中附加到 site_url 的密码重置页面名称
  • cookie_name:包含会话信息的cookie的名称,除非必要,否则不要更改
  • cookie_path:会话cookie的路径,除非必要,否则不要更改
  • cookie_domain:会话cookie的域名,除非必要,否则不要更改
  • cookie_secure:会话cookie的HTTPS仅设置,除非必要,否则不要更改
  • cookie_http:会话cookie的HTTP only协议设置,除非必要,否则不要更改
  • cookie_remember:用户在登录时勾选“记住我”时,用户将保持登录状态的时间。必须遵守PHP的strtotime格式。
  • cookie_forget:用户在登录时未勾选“记住我”时,用户将保持登录状态的时间。必须遵守PHP的strtotime格式。
  • bcrypt_cost:bcrypt散列函数的算法成本,可以根据硬件能力进行更改。
  • smtp0表示使用sendmail发送邮件,1表示使用SMTP。
  • smtp_host:SMTP服务器的主机名。
  • smtp_auth0表示SMTP服务器不需要认证,1表示需要认证。
  • smtp_username:SMTP服务器的用户名。
  • smtp_password:SMTP服务器的密码。
  • smtp_port:SMTP服务器的端口。
  • smtp_securityNULL表示不加密,tls表示TLS加密,ssl表示SSL加密。
  • verify_password_min_length:最小密码长度,默认为3
  • verify_email_min_length:最小电子邮件长度,默认为5
  • verify_email_max_length:最大电子邮件长度,默认为100
  • verify_email_use_banlist:在检查允许的电子邮件时使用黑名单(见/files/domains.json),默认为1true)。
  • attack_mitigation_time:滚动尝试超时的使用时间,默认为+30分钟。必须遵守PHP的strtotime格式。
  • attempts_before_verify:在要求验证码之前,在attack_mitigation_time内可尝试的最大次数。默认为5
  • attempt_before_ban:在attack_mitigation_time内可尝试的最大次数,在临时阻止IP地址之前。默认为30
  • password_min_score:允许的zxcvbn的最小评分。默认为3

其余参数通常无需更改。

验证码实现

如果isBlocked()返回verify,则应显示验证码。调用checkCaptcha($captcha)方法验证验证码。默认情况下此方法返回true,但应覆盖以验证验证码。

例如,如果您使用Google的ReCaptcha NoCaptcha,请使用以下代码

    private function checkCaptcha($captcha)
    {
 try {

        $url = 'https://www.google.com/recaptcha/api/siteverify';
        $data = ['secret'   => 'your_secret_here',
            'response' => $captcha,
            'remoteip' => $this->getIp()];

        $options = [
            'http' => [
                'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                'method'  => 'POST',
                'content' => http_build_query($data)
            ]
        ];

        $context  = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        return json_decode($result)->success;
    }
    catch (\Exception $e) {
        return false;
    }
}

如果不需要使用验证码,请确保将attempt_before_block设置为与attempts_before_verify相同的值。

如何保护页面

使页面仅对认证用户可访问既快又简单,只需在页面顶部添加几行代码即可。

<?php

include("Config.php");
include("Auth.php");

$dbh = new PDO("mysql:host=localhost;dbname=phpauth", "username", "password");

$config = new PHPAuth\Config($dbh);
$auth   = new PHPAuth\Auth($dbh, $config);

if (!$auth->isLogged()) {
    header('HTTP/1.0 403 Forbidden');
    echo "Forbidden";

    exit();
}

?>

消息语言

可以通过将可用的语言之一作为Auth构造函数的第三个参数传递来配置PHPAuth返回的错误和成功消息的语言。如果没有提供语言参数,则默认使用en_GB语言。

示例:$auth = new PHPAuth\Auth($dbh, $config, "fr_FR");

可用语言

  • ar-TN
  • cs_CZ
  • da_DK
  • de_DE
  • en_GB(默认)
  • es_MX
  • fa_IR
  • fr_FR
  • gr_GR
  • hu_HU
  • id_ID
  • it_IT
  • nl_BE
  • nl_NL
  • no_NB
  • pl_PL
  • ps_AF
  • pt_BR
  • ru_RU
  • se_SE
  • sr_RS
  • th_TH
  • uk_UA
  • vi_VN

文档

所有类方法在Wiki中有文档说明。
系统错误代码在此列出并解释。

贡献

任何人都可以为改进或修复PHPAuth做出贡献,您可以通过报告问题(一个错误、一个想法等)或者复制仓库,对您的复制版进行修改,然后请求合并。

致谢