PHP Security Class 0.2

Iniciado por Fvox, 05 de Janeiro , 2009, 08:04:27 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

Fvox

Hi.

Essa classe tá bem básica, mas até que ficou legal, hehe.

CitarFeatures:
-Filtro Anti XSS
-Anti PHP File Upload
-Anti Local File Inclusion (Novo!)
-Anti SQL Injection (POST ou GET)
-Anti Overflow (character limit)
-Grava logs com infos do usuário quando houver tentativa de hacking


Para utilizar no seu script:
<?php
include "security.php";
$sec = new Security;
?>



Source:
<?php
/* PHP Security Class v0.2
by fvox
[Collaps3 CREW] */
class Security
{
   private 
$max_chars 3000//max de caracteres para evitar overflow
   
   
public function __construct(){
      try{
         foreach(
$_POST as $nome=>$value){
            
$this->check($value);
         }
         foreach(
$_GET as $nome=>$value){
            
$this->check($value);
         }
         foreach(
$_COOKIE as $nome=>$value){
            
$this->check($value);
         }
         foreach(
$_FILES as $nome=>$value){
            if(
preg_match("/\.php/i"$value['name'])){
               throw new 
Exception("PHP File Upload");
            }
         }
      }
      catch(
Exception $err){
         
$this->log($err$nome);
         die(
"Hacking Attempt");
      }
   }
   
   private function 
log($err$input){
      
$fp fopen("security.log","a");
      
$data "\n\n\n";
      
$data .= "#####################\n";
      
$data .= "Error:" .$err->getMessage() ."\n";
      
$data .= "Input: ".$_SERVER['QUERY_STRING']."\n";
      
$data .= "IP: ".$_SERVER['REMOTE_ADDR']."\n";
      
$data .= "#####################\n";
      
fwrite($fp$data);
      
fclose($fp);
   }
   
   public function 
check($input){
      if(
strlen($input) > $this->max_chars){
         throw new 
Exception("Overflow");
      }
      elseif(
preg_match("/\.\.\//i",$input)){
         throw new 
Exception("Local File Inclusion");
      }
      elseif(
preg_match("/[^\sa-zA-Z0-9]/i",$input)){
         throw new 
Exception("SQL Injection");
      }
   }
         
   public function 
filtro($input){
      return 
addslashes(htmlentities($input));
   }
}

$fvox = new Security;
?>



Se acharem algum bug, só postar aqui.  ;)
*Valeu branco pelos links de OOP, ajudou bastante, LOL.

[]'s
"Achas que estás caindo na insanidade? Mergulhe."


branco

to desanimado de verificar o código...3:40 agora, ja to indo dormir...
de qualquer forma, parabéns assim mesmo, pelos estudos de POO ^^
tem uma diretiva no php ini que esqueci o nome... da pra vc auto incluir esse script em todas as páginas... fica mais comodo eu acho.

vlws, até mais
Olha o trem... Quem vai ficar, quem vai partir? Quem vai chorar, quem vai sorrir?

JotaC

      .]


Triplo X

Massa é aqui:


<?php
// certifica para que o formulario seja enviado apenas de meu servidor
    
if(!(isset($_SERVER['HTTP_REFERER']) &&
    
stristr($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST']))) {
    
$serverInvalido=true;
    echo 
'<center><font color="#000000" size="4" face="arial">Voce nao tem permissao para fazer isso!<p></font></center>';
    }

   
// proibe a postagem de links em um formulario, por exemplo
    
elseif (preg_match_all("/<a|http:/i"implode($_POST), $out) > 0) {
    echo 
'<center><font color="#000000" size="4" face="arial">Eh proibido postar qualquer link neste formulario!</font></center>';
   
// exit;  ela encerra o codigo nesta linha
    
}
?>


Isso evita span, por exemplo ;)

até
Não me venha dizer que é melhor que alguém que eu te espanco!
Todos não passamos de ratinhos que morrerão um dia como todos os outros...

S3ijy

Muito bom mesmo! Fácil de Implementar, mas faz uma diferença considerável!
Agora tem que alguém tentar vencer isso, pra forçar melhoras no código! E que o ciclo se repita!

Vlw!
S3ijy

shake

Poxa parabéns pela idéia!
Vai ajudar bastante!

Abraço