| Server IP : 210.245.233.93 / Your IP : 216.73.216.226 Web Server : Apache/2.2.15 (CentOS) System : Linux webserver2.onesolution.com.hk 2.6.32-754.35.1.el6.x86_64 #1 SMP Sat Nov 7 12:42:14 UTC 2020 x86_64 User : apache ( 48) PHP Version : 5.3.3 Disable Function : exec, shell_exec, system, passthru, popen, proc_open, pcntl_exec MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/hkosl.com/littleark/webadmin/ |
Upload File : |
<?php
function insert_login_log($user_name, $is_success)
{
global $dbh;
$lb = new LoginBlock;
$fail_count = $lb->get_fail_count();
if ($is_success === false) {
$fail_count++;
}
$max_fail_count = $lb->get_max_fail_count();
$is_block = $fail_count >= $max_fail_count;
$sql = "
INSERT INTO sys_login_log (
create_on, ip_address, user_name, is_success, is_block
) VALUES (
NOW(), :ip_address, :user_name, :is_success, :is_block
)";
$sql_param = array(
':ip_address' => $_SERVER['REMOTE_ADDR'],
':user_name' => $user_name,
':is_success' => $is_success === false ? '0' : '1',
':is_block' => $is_block ? '1' : '0',
);
// TODO: please enable this in production
$sth = $dbh->prepare($sql);
//echo $sth->getSQL( $sql_param ).HTML_EOL;
if (!$sth->execute( $sql_param )){
throw new Exception('[' . $sth->errorCode() . ']: '.print_r($sth->errorInfo()));
exit;
}
if($row = $sth->fetch()){
$loggin = 1;
return true;
}
}
function die_if_login_block()
{
$lb = new LoginBlock;
$lb->die_if_login_block();
}
class LoginBlock
{
private $block_mins = 10;
private $max_fail_count = 5;
function get_max_fail_count()
{
return $this->max_fail_count;
}
function get_fail_count()
{
global $dbh;
$block_mins = $this->block_mins;
$max_fail_count = $this->max_fail_count;
$sql = "SELECT *
FROM sys_login_log
WHERE ip_address = :ip_address AND create_on >= :create_on
ORDER BY create_on DESC
LIMIT $max_fail_count";
$sql_param = array(
':ip_address' => $_SERVER['REMOTE_ADDR'],
':create_on' => date('Y-m-d H:i:s', time() - ($block_mins * 60)),// before $block_mins
);
$sth = $dbh->prepare($sql);
//echo $sth->getSQL( $sql_param ).HTML_EOL; //exit;
if (!$sth->execute( $sql_param )){
throw new Exception('[' . $sth->errorCode() . ']: '.print_r($sth->errorInfo()));
exit;
}
$login_logs = $sth->fetchAll(PDO::FETCH_ASSOC);
$fail_count = 0;
foreach ($login_logs as $login_log) {
if ($login_log['is_success'] == 1 || $login_log['is_block'] == 1) {
break;
} else {
$fail_count++;
}
}
return $fail_count;
}
function die_if_login_block()
{
global $dbh;
$block_mins = $this->block_mins;
$max_fail_count = $this->max_fail_count;
$sql = "SELECT
CASE
WHEN EXISTS(
SELECT * FROM sys_login_log
WHERE ip_address = :ip_address
AND create_on >= :create_on
AND is_block = 1
) THEN 1
ELSE 0
END AS is_block";
$sql_param = array(
':ip_address' => $_SERVER['REMOTE_ADDR'],
':create_on' => date('Y-m-d H:i:s', time() - ($block_mins * 60)),// before $block_mins
);
$sth = $dbh->prepare($sql);
//echo $sth->getSQL( $sql_param ).HTML_EOL; //exit;
if (!$sth->execute( $sql_param )){
throw new Exception('[' . $sth->errorCode() . ']: '.print_r($sth->errorInfo()));
exit;
}
$result = $sth->fetch(PDO::FETCH_ASSOC);
$is_block = $result['is_block'] == 1;
if ($is_block) {
die("You login failure more than $max_fail_count times, please try again after $block_mins mins.");
}
}
}