Hi.
Essa classe tá bem básica, mas até que ficou legal, hehe.
QuoteFeatures:
-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
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
Isso ajudou muito!
Vlw :D
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é
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
Poxa parabéns pela idéia!
Vai ajudar bastante!
Abraço