Advertisement
michels10

functions.php

Apr 13th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.09 KB | None | 0 0
  1. <?php
  2.  
  3. include_once 'psl-config.php';
  4.  
  5. // FUNÇÃO SESSÃO SEGURA
  6. function sec_session_start() {
  7.     $session_name = 'sec_session_id';   // Set a custom session name
  8.     $secure = SECURE;
  9.  
  10.     // Isso interrompe JavaScript ser capaz de acessar o id da sessão.
  11.     $httponly = true;
  12.  
  13.     // Forces sessions to only use cookies.
  14.     if (ini_set('session.use_only_cookies', 1) === FALSE) {
  15.         header("Location: ../error.php?err=Não foi possível iniciar uma sessão segura (ini_set)");
  16.         exit();
  17.     }
  18.  
  19.     // Obtém parâmetros cookies atuais.
  20.     $cookieParams = session_get_cookie_params();
  21.     session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
  22.  
  23.     // Define o nome da sessão ao estabelecido acima.
  24.     session_name($session_name);
  25.  
  26.     session_start();            // Iniciar a sessão de PHP
  27.     session_regenerate_id();    // regenerar a sessão, eliminar o antigo.
  28. }
  29.  
  30. // FUNÇÃO LOGIN
  31. function login($email, $password, $mysqli) {
  32.     // Usando definições pré-estabelecidas significa que a injeção de SQL (um tipo de ataque) não é possível.
  33.     if ($stmt = $mysqli->prepare("SELECT user, id, username, email, password, nivel, posicao, nome_imagem, ativacao, ultimoacesso, salt FROM login_users WHERE email = ? LIMIT 1")) {
  34.         $stmt->bind_param('s', $email);  // Relaciona  "$email" ao parâmetro.
  35.         $stmt->execute();    // Executa a tarefa estabelecida.
  36.         $stmt->store_result();
  37.  
  38.         // obtém variáveis a partir dos resultados.
  39.         $stmt->bind_result($user, $user_id, $username, $email, $db_password, $nivel, $posicao, $foto, $ativacao, $ultimoacesso, $salt);
  40.         $stmt->fetch();
  41.  
  42.          // faz o hash da senha com um salt exclusivo.
  43.         $password = hash('sha512', $password . $salt);
  44.         if ($stmt->num_rows == 1) {
  45.             // Caso o usuário exista, conferimos se a conta está bloqueada
  46.             // devido ao limite de tentativas de login ter sido ultrapassado
  47.             if (checkbrute($user_id, $mysqli) == true) {
  48.                 // A conta está bloqueada
  49.                 // Envia um email ao usuário informando que a conta está bloqueada
  50.                 return false;
  51.             } else {
  52.                 // Verifica se a senha confere com o que consta no banco de dados
  53.                 // a senha do usuário é enviada.
  54.                 if ($db_password == $password) {
  55.                     // A senha está correta!
  56.                     // Obtém o string usuário-agente do usuário.
  57.                     $user_browser = $_SERVER['HTTP_USER_AGENT'];
  58.  
  59.                     // proteção XSS conforme imprimimos este valor
  60.                     $user_id = preg_replace("/[^0-9]+/", "", $user_id);
  61.                     $_SESSION['id'] = $user_id;
  62.  
  63.                     // proteção XSS conforme imprimimos este valor
  64.                     $username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username);
  65.  
  66.                     //INCLUIDOS POR MICHEL
  67.                     $_SESSION['user'] = $user;        
  68.                     $_SESSION['username'] = $username;                    
  69.                     $_SESSION['email'] = $email;
  70.                     $_SESSION['posicao'] = $posicao;
  71.                     $_SESSION['nome_imagem'] = $foto;
  72.                     $_SESSION['ultimoacesso'] = $ultimoacesso;
  73.                     $_SESSION['nivel'] = $nivel;
  74.                     $_SESSION['ativacao'] = $ativacao;
  75.                    
  76.                     //$_SESSION['username'] = $username;
  77.                     $_SESSION['login_string'] = hash('sha512', $password . $user_browser);
  78.                    
  79.                     // LLogin concluído com sucesso.
  80.                     return true;
  81.                 } else {
  82.                     // A senha não está correta
  83.                     // Registramos essa tentativa no banco de dados
  84.                     $now = time();
  85.                     if (!$mysqli->query("INSERT INTO login_attempts(user_id, time)
  86.                                    VALUES ('$user_id', '$now')")) {
  87.                         header("Location: ../error.php?err=Database error: login_attempts");
  88.                         exit();
  89.                     }
  90.                    
  91.                     return false;
  92.                 }
  93.             }
  94.         } else {
  95.             // Tal usuário não existe.
  96.             return false;
  97.         }
  98.     } else {
  99.         // Não foi possível criar uma declaração preparada
  100.         header("Location: ../error.php?err=Erro banco de dados: Não é possível preparar declaração");
  101.         exit();
  102.     }
  103. }
  104.  
  105. //FUNÇÃO FORÇA BRUTA
  106. function checkbrute($user_id, $mysqli) {
  107.     // Registra a hora atual
  108.     $now = time();
  109.  
  110.     // Todas as tentativas de login são contadas dentro do intervalo das últimas 2 horas.
  111.     $valid_attempts = $now - (2 * 60 * 60);
  112.  
  113.     if ($stmt = $mysqli->prepare("SELECT time
  114.                                  FROM login_attempts
  115.                                  WHERE user_id = ? AND time > '$valid_attempts'")) {
  116.         $stmt->bind_param('i', $user_id);
  117.  
  118.         // Executa a tarefa pré-estabelecida.
  119.         $stmt->execute();
  120.         $stmt->store_result();
  121.  
  122.         // Se houve mais do que 5 tentativas fracassadas de login
  123.         if ($stmt->num_rows > 5) {
  124.            
  125.             echo "<script>alert('Seu acesso foi bloqueado temporariamente devido a tentativas maus sucedidas de login!');</script>";
  126.             return true;
  127.         } else {
  128.             return false;
  129.         }
  130.     } else {
  131.         // Não foi possível criar uma declaração preparada
  132.         header("Location: ../error.php?err=Erro banco de dados: Não é possível preparar declaração");
  133.         exit();
  134.     }
  135. }
  136.  
  137. // FUNÇÃO CAPTCHA
  138. function post_captcha($user_response) {
  139.         $fields_string = '';
  140.         $fields = array(
  141.             'secret' => 'meucodicosecreto',
  142.             'response' => $user_response
  143.         );
  144.         foreach($fields as $key=>$value)
  145.         $fields_string .= $key . '=' . $value . '&';
  146.         $fields_string = rtrim($fields_string, '&');
  147.  
  148.         $ch = curl_init();
  149.         curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify');
  150.         curl_setopt($ch, CURLOPT_POST, count($fields));
  151.         curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
  152.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
  153.  
  154.         $result = curl_exec($ch);
  155.         curl_close($ch);
  156.  
  157.         return json_decode($result, true);
  158.  
  159. }
  160.  
  161. // FUNÇÃO CHECAGEM DE LOGIN
  162. function login_check1($mysqli) {
  163.     //$nivel = 1;
  164.     // Verifica se todas as variáveis das sessões foram definidas
  165.     if(!isset($_SESSION['id']) && !isset($_SESSION['login_string'])) {
  166.     // Not logged in
  167.     return false;
  168.     echo "<script>alert('Você não tem permissão necessaria para acessar esta página.'); history.back();<</script>";
  169.  
  170. } else {
  171.        
  172.        
  173.         $user_id = $_SESSION['id'];
  174.         $login_string = $_SESSION['login_string'];
  175.         $username = $_SESSION['username'];
  176.         $nivel = $_SESSION['nivel'];
  177.        
  178.  
  179.         // Pega a string do usuário.
  180.         $user_browser = $_SERVER['HTTP_USER_AGENT'];
  181.  
  182.         if ($stmt = $mysqli->prepare("SELECT password
  183.                       FROM login_users
  184.                       WHERE id = ? LIMIT 1")) {
  185.             // Atribui "$user_id" ao parâmetro.
  186.             $stmt->bind_param('i', $user_id);
  187.             $stmt->execute();   // Execute the prepared query.
  188.             $stmt->store_result();
  189.  
  190.             if ($stmt->num_rows == 1) {
  191.                 // Caso o usuário exista, pega variáveis a partir do resultado.
  192.                 $stmt->bind_result($password);
  193.                 $stmt->fetch();
  194.                 $login_check = hash('sha512', $password . $user_browser);
  195.  
  196.                 if ($login_check == $login_string) {
  197.                     // Logado!!!
  198.                     return true;
  199.                 }
  200.                 else {
  201.                     // Não foi logado
  202.                     return false;
  203.                 }
  204.             } else {
  205.                 // Não foi logado
  206.                 return false;
  207.             }
  208.         } else {
  209.             // Não foi possível preparar declaração
  210.             header("Location: ../error.php?err=Erro banco de dados: Não é possível preparar declaração");
  211.             exit();
  212.         }
  213.     }
  214.  
  215. }
  216.  
  217. // FUNÇÃO LIMPAR URL PHP_SELF
  218. function esc_url($url) {
  219.  
  220.     if ('' == $url) {
  221.         return $url;
  222.     }
  223.  
  224.     $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url);
  225.    
  226.     $strip = array('%0d', '%0a', '%0D', '%0A');
  227.     $url = (string) $url;
  228.    
  229.     $count = 1;
  230.     while ($count) {
  231.         $url = str_replace($strip, '', $url, $count);
  232.     }
  233.    
  234.     $url = str_replace(';//', '://', $url);
  235.  
  236.     $url = htmlentities($url);
  237.    
  238.     $url = str_replace('&amp;', '&#038;', $url);
  239.     $url = str_replace("'", '&#039;', $url);
  240.  
  241.     if ($url[0] !== '/') {
  242.         // Nós estamos apenas interessados em links relativos de $_SERVER['PHP_SELF']
  243.         return '';
  244.     } else {
  245.         return $url;
  246.     }
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement