Acum este Lun Dec 17, 2018 2:20 am

[SCRIPT] Clasă de securitate

Ghiduri oficiale, cât și neoficiale, create de membrii comunității pentru îmbunătățirea serverului dvs., clientului etc.
Avatar utilizator
 
Mesaje: 4821
Membru din: Mar Mar 08, 2011 3:47 pm
Localitate: Gaia
Like-uri oferite: 86 times
Like-uri primite: 166 times

[SCRIPT] Clasă de securitate

de hacktor_ » Mar Iul 22, 2014 7:21 pm

Hello!

M-am gândit ca să postez pe 4metin propria mea clasă de securitate :) este folosită la Async2 CMS și cuprinde securitatea de bază. Voi face o versiune extinsă cu diverse filtre de securitate :)

ATENȚIE! Recomand MINIM versiunea PHP 5.4! Dacă aveți host cu PHP sub 5.4 nu va funcționa! Această limitare de versiune se datorează din cauza nivelului de securitate oferit de PHP la această versiune.

Licența:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at cereale option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

Spoiler: show
Funcții:
- sanitizeVar(string $variabila);
- stripInput(string $variabila);
- stripGet(unknown $variabila);
- stripFilename(string $filename);
- phpEntities(string $string);
- trimLink(string $string, int $limit);
- formatCode(string $string);
- createCsrf(int $salt);

Ce fac funcțiile:
1. sanitizeVar -> elimina elementele HTML și dacă este versiunea PHP sub 5.3 adaugă slash-uri
2. stripInput -> filtrează un input de caractere HTML
3. stripGet -> verifica variabila $_GET dacă conține ghilimele ( " ), apostrif ( ' ) și/sau paranteze ascuțite ( < și > )
4. stripFilename -> verifică dacă numele fișierului conține caractere alfa-numerice (a-zA-Z0-9), le elimină pe cele 'ilegale'
5. phpEntities -> verifică dacă un cod anume conține caractere folosite de PHP și le înlocuiește cu cele sigure
6. trimLink -> calculează lungimea unui string și-l taie după un număr de $limit caractere.
7. formatCode -> indentează codul cu unul sau două spații goale
8. createCsrf -> generează un cod unic CSRF (Cross Site Request Forgery) ca să nu fie un site raportat ca malware. Detalii aici: http://en.wikipedia.org/wiki/Cross-site_request_forgery

Clasa de securitate:
Code: Select All Code
<?php

/**
 * @package Async2 CMS
 * @category Security
 * @author valkyrie92
 * @copyright Copyright (C) 2014 Petru
 * @version 1.0.2
 * @license GPL v3
 *         
 *          This program is free software: you can redistribute it and/or modify
 *          it under the terms of the GNU General Public License as published by
 *          the Free Software Foundation, either version 3 of the License, or
 *          (at cereale option) any later version.
 *          This program is distributed in the hope that it will be useful,
 *          but WITHOUT ANY WARRANTY; without even the implied warranty of
 *          MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *          GNU General Public License for more details.
 *          You should have received a copy of the GNU General Public License
 *          along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * Scurtatura a clasei
 */
namespace async2\core\security;

class BaseSecurity {
    /**
     * Autorul clasei de securitate.
     * @ignore pastrati 'SuperTux' daca doriti ca totul sa fie OK
     */
    private static $_author = 'SuperTux';
    /**
     * Versiunea PHP curenta
     */
    private static $_phpver_cur = PHP_VERSION;
    /**
     * Versiunea PHP recomandata
     */
    private static $_phpver_rec = '5.4';

    /**
     * Construim clasa Async2 Security
     */
    public function __construct() {
        if(self::$_author != 'SuperTux') {
            exit('Script Async2::Security realizat de SuperTux.');
        }
        if(version_compare(self::$_phpver_cur, self::$_phpver_rec, '<=')) {
            exit('Versiunea PHP trebuie sa fie cel putin 5.4!');
        }
    }
    /**
     * Functie pentru "curatarea" variabilei.
     * Poate fi orice care sa contina un string.
     *
     * @param string $var orice string cu impuritati
     * @return string $var curatat
     * @version 1.1.4
     */
    public function sanitizeVar($var) {
        $var = htmlentities($var, ENT_QUOTES);
        $var = htmlspecialchars($var, ENT_QUOTES, 'UTF-8');
        if(get_magic_quotes_gpc()) {
            $var = stripslashes($var);
        }
        return $var;
    }
    
    
/**
     * Functie pentru curatarea unui input html
     * 
     * @param string $text
     *        text-ul care urmeaza a fi curatat
     * @return Ambigous <string, mixed>
     * @version 1.1.1
     */
    public function stripInput($text) {
        if(!is_array($text)) {
            $text = stripslashes(trim($text));
            $text = preg_replace('/(&amp;)+(?=\#([0-9]{2,3});)/i', '&', $text);
            $search = [
                    '&',
                    '\"',
                    "'",
                    '\\',
                    '\"',
                    '\'',
                    '<',
                    '>',
                    '&nbsp;'
            ];
            $replace = [
                    '&amp;',
                    '&quot;',
                    '&#39;',
                    '&#92;',
                    '&quot;',
                    '&#39;',
                    '&lt;',
                    '&gt;',
                    ' '
            ];
            $text = str_replace($search, $replace, $text);
        } else {
            foreach($text as $key => $value) {
                $text[$key] = $this->stripInput($value);
            }
        }
        return $text;
    }
    
    
/**
     * Functie pentru eliminarea impuritatilor in $_GET
     * 
     * @param unknown $check_url
     * @example $_GET
     * @return boolean
     * @version 1.0.4
     */
    public function stripGet($check_url) {
        $return = false;
        if(is_array($check_url)) {
            foreach($check_url as $value) {
                if($this->stripGet($value) == true) {
                    return true;
                }
            }
        } else {
            $check_url = str_replace([
                    '\"',
                    '\'',
                    '<',
                    '>'
            ], [
                    '',
                    '',
                    '&lt;',
                    '&rt;'
            ], urldecode($check_url));
            if(preg_match('/<[^<>]+>/i', $check_url)) {
                return true;
            }
        }
        return $return;
    }
    
    
/**
     * Functie pentru curatarea fisierelor uploadate
     * 
     * @param string $filename
     *        numele fisierului
     * @return Ambigous <mixed, number>
     */
    public function stripFilename($filename) {
        $filename = strtolower(str_replace(' ', '_', $filename));
        $filename = preg_replace('/[^a-zA-Z0-9_-]/', '', $filename);
        $filename = preg_replace('/^\W/', '', $filename);
        $filename = preg_replace('/([_-])\1+/', '$1', $filename);
        if($filename == '') {
            $filename = time();
        }
        
        return $filename
;
    }
    
    
/**
     * Functie pentru eliminarea caracterelor PHP
     * 
     * @param string $text        
     * @return mixed
     * @version 1.0.0
     */
    public function phpEntities($text) {
        $search = [
                '&',
                '\"',
                "'",
                '\\',
                '<',
                '>'
        ];
        $replace = [
                '&amp;',
                '&quot;',
                '&#39;',
                '&#92;',
                '&lt;',
                '&gt;'
        ];
        $text = str_replace($search, $replace, $text);
        return $text;
    }
    
    
/**
     * Functie pentru 'taierea' link-ului
     * 
     * @param string $text        
     * @param int $length        
     * @return mixed
     * @example http://site.ro/web/site/news/234 => http://site.ro/.../234
     * @version 1.0.0
     */
    public function trimLink($text, $length) {
        $dec = [
                '&',
                '\"',
                "'",
                '\\',
                '\"',
                '\'',
                '<',
                '>'
        ];
        $enc = [
                '&amp;',
                '&quot;',
                '&#39;',
                '&#92;',
                '&quot;',
                '&#39;',
                '&lt;',
                '&gt;'
        ];
        $text = str_replace($enc, $dec, $text);
        if(strlen($text) > $length) {
            $text = substr($text, 0, ($length - 3)) . '...';
        }
        $text = str_replace($dec, $enc, $text);
        return $text;
    }
    
    
/**
     * Functie pentru formatarea codului
     * 
     * @param string $text        
     * @return mixed
     * @version 1.0.0
     */
    public function formatCode($text) {
        $text = str_replace('  ', '&nbsp; ', $text);
        $text = str_replace('  ', ' &nbsp;', $text);
        $text = str_replace('\t', '&nbsp; &nbsp;', $text);
        $text = preg_replace('/^ {1}/m', '&nbsp;', $text);
        return $text;
    }

    /**
     * Genereaza un token special pentru CSRF (Cross Site Request Forgery
     * 
     * @link http://en.wikipedia.org/wiki/Cross-site_request_forgery
     * 
     * @param int $salt un cod aleatoriu ca suport pentru generare
     * @return string
     * @version 1.0.1
     */
    public function createCsrf($salt) {
        $token = uniqid((rand() . $salt), true);
        $token = md5($token);
        $token = base64_encode($token);
        return $token;
    }
}
Â


Exemplu de folosire:
Code: Select All Code

<?php

/**
 * Chemam clasa - metoda NAMESPACE
 */
use async2\core\security\BaseSecurity;

/**
 * Afisam toate erorile
 */
error_reporting(E_ALL);

/**
 * Cerem clasa
 */
require 'Async2Security.php';

/**
 * Definim $_GET pentru demo
 */
$_GET['demo_security'] = "nasty'<script>alert('Hi there!')</script>";

/**
 * Aplicam clasa
 */
$s = new BaseSecurity();

/**
 * Aplicam functiile
 */
$sanitize = $s->sanitizeVar('Sunt\'incurat "in ceea ce faq><');
$input = $s->stripInput('<script>alert(\'Im a monkey!\')</script>');
$get = $s->stripGet($_GET['demo_security']);
$filename = $s->stripFilename('Acest-Fisier-eSte-f0ar73-@b#');
$phpent = $s->phpEntities('<?php echo "Satisfaction!"; ?>');
$trim = $s->trimLink('http://kronick.eu/web/site/news/234552', 5);
$format = $s->formatCode("Acest \t cod \t este \t separat \t de \t tab-uri");
$csrf = $s->createCsrf('15766425');

/**
 * Output al functiilor
 */
echo $sanitize . '<br>';
echo $input . '<br>';
if(
$get == true) {
    echo $get . '<br>';
}
 else {
    echo 'Strip GET a trecut testul.<br>';
}
echo $filename . '<br>';
echo $phpent . '<br>';
echo $trim . '<br>';
echo $format . '<br>';
echo $csrf . '<br>';


Download: http://kronick.eu/downloads/scripts/async2security.zip
Demo: http://kronick.eu/downloads/scripts/dem ... /index.php
Aplicare:
Code: Select All Code
<?php

use async2
\core\security\BaseSecurity;

require 'Async2Security.php';

$security = new BaseSecurity();
Â


ATENȚIE! Anumite funcții par să nu funcționeze, dar de fapt funcționează perfect sau nu dă output!

Checksum SHA-512 pe arhiva:
4c4e56d236a2358b08172db850714e46e21729780fe178bec861aa3ce7ec51914a46fe1261500f2f4a0fd78e6ad8003b6ea849a2bc48e2efd0a51fcfa240e8fd async2security.zip

Checksum SHA-512 pe fisiere:
57c8a128c40e1cd6f649125d300c190381ca52350b460078396bb10435065c24b18233236ed7478e0d86dad30e3388f2109d637eb708436948d57500ad2ce133 su.php
48322d129e9ebbc09ca423417d83b2133267b448266cb292bcfca135585fcb2ba142cf0c53a362805dd30e9cdae06caa8771f39d795a6baf70d78c39726ad1cd Async2Security.php
Imagine

 
Mesaje: 157
Membru din: Mie Mar 09, 2011 3:42 pm
Like-uri oferite: 12 times
Like-uri primite: 2 times

Re: [SCRIPT] Clasă de securitate

de camera88 » Lun Iun 22, 2015 4:36 pm

Salut, poti reuploada fisierele?

 
Mesaje: 193
Membru din: Vin Iun 05, 2015 2:16 pm
Like-uri oferite: 0 time
Like-uri primite: 0 time

Re: [SCRIPT] Clasă de securitate

de dan0n333 » Dum Noi 15, 2015 9:38 pm

Salut !

Te rog sa pui alt link de download ! Ai 12 h inainte ca acest subiect sa fie trimis la " Cos " ! O seara buna !

Avatar utilizator
 
Mesaje: 262
Membru din: Dum Dec 29, 2013 9:25 pm
Like-uri oferite: 0 time
Like-uri primite: 4 times

Re: [SCRIPT] Clasă de securitate

de Riddler. » Dum Dec 06, 2015 9:33 pm

Inactiv closed.
Gloată, scumpă, compusă din oameni ieftini // Ce cred că dac-am dat noroc de două ori suntem prieteni !


Înapoi la Ghiduri și tutoriale

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 33 vizitatori