Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- include_once 'psl-config.php';
- // FUNÇÃO SESSÃO SEGURA
- function sec_session_start() {
- $session_name = 'sec_session_id'; // Set a custom session name
- $secure = SECURE;
- // Isso interrompe JavaScript ser capaz de acessar o id da sessão.
- $httponly = true;
- // Forces sessions to only use cookies.
- if (ini_set('session.use_only_cookies', 1) === FALSE) {
- header("Location: ../error.php?err=Não foi possível iniciar uma sessão segura (ini_set)");
- exit();
- }
- // Obtém parâmetros cookies atuais.
- $cookieParams = session_get_cookie_params();
- session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
- // Define o nome da sessão ao estabelecido acima.
- session_name($session_name);
- session_start(); // Iniciar a sessão de PHP
- session_regenerate_id(); // regenerar a sessão, eliminar o antigo.
- }
- // FUNÇÃO LOGIN
- function login($email, $password, $mysqli) {
- // Usando definições pré-estabelecidas significa que a injeção de SQL (um tipo de ataque) não é possível.
- if ($stmt = $mysqli->prepare("SELECT user, id, username, email, password, nivel, posicao, nome_imagem, ativacao, ultimoacesso, salt FROM login_users WHERE email = ? LIMIT 1")) {
- $stmt->bind_param('s', $email); // Relaciona "$email" ao parâmetro.
- $stmt->execute(); // Executa a tarefa estabelecida.
- $stmt->store_result();
- // obtém variáveis a partir dos resultados.
- $stmt->bind_result($user, $user_id, $username, $email, $db_password, $nivel, $posicao, $foto, $ativacao, $ultimoacesso, $salt);
- $stmt->fetch();
- // faz o hash da senha com um salt exclusivo.
- $password = hash('sha512', $password . $salt);
- if ($stmt->num_rows == 1) {
- // Caso o usuário exista, conferimos se a conta está bloqueada
- // devido ao limite de tentativas de login ter sido ultrapassado
- if (checkbrute($user_id, $mysqli) == true) {
- // A conta está bloqueada
- // Envia um email ao usuário informando que a conta está bloqueada
- return false;
- } else {
- // Verifica se a senha confere com o que consta no banco de dados
- // a senha do usuário é enviada.
- if ($db_password == $password) {
- // A senha está correta!
- // Obtém o string usuário-agente do usuário.
- $user_browser = $_SERVER['HTTP_USER_AGENT'];
- // proteção XSS conforme imprimimos este valor
- $user_id = preg_replace("/[^0-9]+/", "", $user_id);
- $_SESSION['id'] = $user_id;
- // proteção XSS conforme imprimimos este valor
- $username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username);
- //INCLUIDOS POR MICHEL
- $_SESSION['user'] = $user;
- $_SESSION['username'] = $username;
- $_SESSION['email'] = $email;
- $_SESSION['posicao'] = $posicao;
- $_SESSION['nome_imagem'] = $foto;
- $_SESSION['ultimoacesso'] = $ultimoacesso;
- $_SESSION['nivel'] = $nivel;
- $_SESSION['ativacao'] = $ativacao;
- //$_SESSION['username'] = $username;
- $_SESSION['login_string'] = hash('sha512', $password . $user_browser);
- // LLogin concluído com sucesso.
- return true;
- } else {
- // A senha não está correta
- // Registramos essa tentativa no banco de dados
- $now = time();
- if (!$mysqli->query("INSERT INTO login_attempts(user_id, time)
- VALUES ('$user_id', '$now')")) {
- header("Location: ../error.php?err=Database error: login_attempts");
- exit();
- }
- return false;
- }
- }
- } else {
- // Tal usuário não existe.
- return false;
- }
- } else {
- // Não foi possível criar uma declaração preparada
- header("Location: ../error.php?err=Erro banco de dados: Não é possível preparar declaração");
- exit();
- }
- }
- //FUNÇÃO FORÇA BRUTA
- function checkbrute($user_id, $mysqli) {
- // Registra a hora atual
- $now = time();
- // Todas as tentativas de login são contadas dentro do intervalo das últimas 2 horas.
- $valid_attempts = $now - (2 * 60 * 60);
- if ($stmt = $mysqli->prepare("SELECT time
- FROM login_attempts
- WHERE user_id = ? AND time > '$valid_attempts'")) {
- $stmt->bind_param('i', $user_id);
- // Executa a tarefa pré-estabelecida.
- $stmt->execute();
- $stmt->store_result();
- // Se houve mais do que 5 tentativas fracassadas de login
- if ($stmt->num_rows > 5) {
- echo "<script>alert('Seu acesso foi bloqueado temporariamente devido a tentativas maus sucedidas de login!');</script>";
- return true;
- } else {
- return false;
- }
- } else {
- // Não foi possível criar uma declaração preparada
- header("Location: ../error.php?err=Erro banco de dados: Não é possível preparar declaração");
- exit();
- }
- }
- // FUNÇÃO CAPTCHA
- function post_captcha($user_response) {
- $fields_string = '';
- $fields = array(
- 'secret' => 'meucodicosecreto',
- 'response' => $user_response
- );
- foreach($fields as $key=>$value)
- $fields_string .= $key . '=' . $value . '&';
- $fields_string = rtrim($fields_string, '&');
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify');
- curl_setopt($ch, CURLOPT_POST, count($fields));
- curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
- $result = curl_exec($ch);
- curl_close($ch);
- return json_decode($result, true);
- }
- // FUNÇÃO CHECAGEM DE LOGIN
- function login_check1($mysqli) {
- //$nivel = 1;
- // Verifica se todas as variáveis das sessões foram definidas
- if(!isset($_SESSION['id']) && !isset($_SESSION['login_string'])) {
- // Not logged in
- return false;
- echo "<script>alert('Você não tem permissão necessaria para acessar esta página.'); history.back();<</script>";
- } else {
- $user_id = $_SESSION['id'];
- $login_string = $_SESSION['login_string'];
- $username = $_SESSION['username'];
- $nivel = $_SESSION['nivel'];
- // Pega a string do usuário.
- $user_browser = $_SERVER['HTTP_USER_AGENT'];
- if ($stmt = $mysqli->prepare("SELECT password
- FROM login_users
- WHERE id = ? LIMIT 1")) {
- // Atribui "$user_id" ao parâmetro.
- $stmt->bind_param('i', $user_id);
- $stmt->execute(); // Execute the prepared query.
- $stmt->store_result();
- if ($stmt->num_rows == 1) {
- // Caso o usuário exista, pega variáveis a partir do resultado.
- $stmt->bind_result($password);
- $stmt->fetch();
- $login_check = hash('sha512', $password . $user_browser);
- if ($login_check == $login_string) {
- // Logado!!!
- return true;
- }
- else {
- // Não foi logado
- return false;
- }
- } else {
- // Não foi logado
- return false;
- }
- } else {
- // Não foi possível preparar declaração
- header("Location: ../error.php?err=Erro banco de dados: Não é possível preparar declaração");
- exit();
- }
- }
- }
- // FUNÇÃO LIMPAR URL PHP_SELF
- function esc_url($url) {
- if ('' == $url) {
- return $url;
- }
- $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url);
- $strip = array('%0d', '%0a', '%0D', '%0A');
- $url = (string) $url;
- $count = 1;
- while ($count) {
- $url = str_replace($strip, '', $url, $count);
- }
- $url = str_replace(';//', '://', $url);
- $url = htmlentities($url);
- $url = str_replace('&', '&', $url);
- $url = str_replace("'", ''', $url);
- if ($url[0] !== '/') {
- // Nós estamos apenas interessados em links relativos de $_SERVER['PHP_SELF']
- return '';
- } else {
- return $url;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement