מחלקה להגנה על האתר שלכם(Sql Injection, Xss, More)
קוד(PASTEBIN)

קוד:
<?php
קוד:
    //=======================================================================
    //==                        RaFaeL Security                            ==
    //=======================================================================
    class Security {
        private $xss = array(
            "htmlspecialchars" => true, 
            "htmlentities" => true, //Don't use if strip_tags enabled
            "strip_tags" => false //Don't use if htmlentities enabled
        ), $sql = array(
            "stripslashes" => true, 
            "mysql_real_escape_string" => true
        ), $settings = array(
            "REQUEST_ENCTYPE" => true,
            "DOUBLE_ENCTYPE"  => true
        );
        function __construct($settings = array(), $enabled = array()) {
            foreach($enabled as $enable=>$value) {
                $this->SetFunc($enable, $value);
            }
            foreach($settings as $setting=>$value) {
                if(isset($this->settings[$setting]) && is_bool($value)) $this->settings[$setting] = $value;
            }

            if($this->settings["REQUEST_ENCTYPE"]) {
                foreach($_REQUEST as $name=>$value) 
                    $_REQUEST[$name] = $this->Sql($value);
            }
        }
        function Xss($str) {
            foreach($this->xss as $func=>$state) {
                if($state == true) $str = $func($str);
            }

            return $str;
        }
        function Sql($str) {
            foreach($this->sql as $func=>$state) {
                if($state == true) $str = $func($str);
            }

            return $str;
        }
        function SetFunc($enable, $value = true) {
            if(isset($this->xss[$enable]) && is_bool($value)) $this->Xss[$enable] = $value;
            else if(isset($this->sql[$enable]) && is_bool($value)) $this->Sql[$enable] = $value;
            return true;
        }
        function Enctype($str) {
            $str = hash('sha256', md5($str));
            return $this->settings["DOUBLE_ENCTYPE"]? (substr(hash('sha512', $str), strlen($str), strlen($str)*0.8)):($str);
        }
    }
?>

שימוש
יצירת המחלקה
PHP Code:
$Security = new Security(); // $Security = new Security([Settings], [Disabled]); 
קיימים שתי פארמטרים,[*] הגדרות[*] איזה פונקציות יופעלו
[**] הגדרות קיימות:
קוד:
array(
קוד:
            "REQUEST_ENCTYPE" => true,
            "DOUBLE_ENCTYPE"  => true
);

[**] פונקציות קיימות:
קוד:
array(
קוד:
    //Xss
    "htmlspecialchars" => true, 
    "htmlentities" => true, //Don't use if strip_tags enabled
    "strip_tags" => false, //Don't use if htmlentities enabled
    //Sql
    "stripslashes" => true, 
    "mysql_real_escape_string" => true
);


דוגמא:
PHP Code:
$Security = new Security(array("DOUBLE_ENCTYPE" => false), array("htmlentities" => false)); 


פונקציות
Xss, שימוש:
PHP Code:
echo $Security->Xss("<html>'RaFaeL's Security class'</html>"); //&lt;html&gt;'RaFaeL's Security class'&lt;/html&gt; 
Sql, שימוש:
PHP Code:
echo $Security->Sql("'RaFaeL's Security class'"); //\'RaFaeL\'s Security class\' 

SetFunc, שימוש:
PHP Code:
$Security->SetFunc("htmlentities"true); 

Enctype, שימוש:
PHP Code:
echo $Security->Enctype("RaFaeL"); //e980a7582c517886f2d80f88fd9a5a533a6fab71f3b4b04c8dcb1b59e4f2f033 
חשוב לדעת
$_GET & $_POST עוברים בדיקת בטיחות אוטומטית, בשביל לבטל:
PHP Code:
$Security = new Security(array("REQUEST_ENCTYPE" => false)); 
מה חדש[*] אפשרות הגדרות[*] אפשרות לבטל\להחזיר את הפונקציות[*] אי אפשר לשים פונקציות שלא קיימות

הצעות
אשמח לקבל הצעות לגירסא הבאה

תהנו