Vệ sinh trong PHP là gì?

Tôi đã chỉ cho bạn cách làm sạch và xác thực các trường biểu mẫu bằng cách sử dụng PHP vì nó đã trở thành một trong những khía cạnh quan trọng của bảo mật. Hy vọng bạn thích nó. Hãy tiếp tục theo dõi chúng tôi để tìm hiểu thêm và cung cấp cho chúng tôi phản hồi của bạn trong không gian nhất định bên dưới. 🙂

PHP hiện có các hàm filter_input đẹp mắt mới, chẳng hạn như giải phóng bạn khỏi việc tìm kiếm 'biểu thức chính thức e-mail cuối cùng' vì giờ đây đã có loại FILTER_VALIDATE_EMAIL tích hợp sẵn

Lớp bộ lọc của riêng tôi [sử dụng JavaScript để đánh dấu các trường bị lỗi] có thể được bắt đầu bằng yêu cầu ajax hoặc bài đăng dạng bình thường. [xem ví dụ bên dưới]

/**
 *  Pork.FormValidator
 *  Validates arrays or properties by setting up simple arrays. 
 *  Note that some of the regexes are for dutch input!
 *  Example:
 * 
 *  $validations = array['name' => 'anything','email' => 'email','alias' => 'anything','pwd'=>'anything','gsm' => 'phone','birthdate' => 'date'];
 *  $required = array['name', 'email', 'alias', 'pwd'];
 *  $sanitize = array['alias'];
 *
 *  $validator = new FormValidator[$validations, $required, $sanitize];
 *                  
 *  if[$validator->validate[$_POST]]
 *  {
 *      $_POST = $validator->sanitize[$_POST];
 *      // now do your saving, $_POST has been sanitized.
 *      die[$validator->getScript[].""];
 *  }
 *  else
 *  {
 *      die[$validator->getScript[]];
 *  }   
 *  
 * To validate just one element:
 * $validated = new FormValidator[]->validate['blah@bla.', 'email'];
 * 
 * To sanitize just one element:
 * $sanitized = new FormValidator[]->sanitize['blah', 'string'];
 * 
 * @package pork
 * @author SchizoDuckie
 * @copyright SchizoDuckie 2008
 * @version 1.0
 * @access public
 */
class FormValidator
{
    public static $regexes = Array[
            'date' => "^[0-9]{1,2}[-/][0-9]{1,2}[-/][0-9]{4}\$",
            'amount' => "^[-]?[0-9]+\$",
            'number' => "^[-]?[0-9,]+\$",
            'alfanum' => "^[0-9a-zA-Z ,.-_\\s\?\!]+\$",
            'not_empty' => "[a-z0-9A-Z]+",
            'words' => "^[A-Za-z]+[A-Za-z \\s]*\$",
            'phone' => "^[0-9]{10,11}\$",
            'zipcode' => "^[1-9][0-9]{3}[a-zA-Z]{2}\$",
            'plate' => "^[[0-9a-zA-Z]{2}[-]]{2}[0-9a-zA-Z]{2}\$",
            'price' => "^[0-9.,]*[[[.,][-]]|[[.,][0-9]{2}]]?\$",
            '2digitopt' => "^\d+[\,\d{2}]?\$",
            '2digitforce' => "^\d+\,\d\d\$",
            'anything' => "^[\d\D]{1,}\$"
    ];
    private $validations, $sanatations, $mandatories, $errors, $corrects, $fields;
    

    public function __construct[$validations=array[], $mandatories = array[], $sanatations = array[]]
    {
        $this->validations = $validations;
        $this->sanitations = $sanitations;
        $this->mandatories = $mandatories;
        $this->errors = array[];
        $this->corrects = array[];
    }

    /**
     * Validates an array of items [if needed] and returns true or false
     *
     */
    public function validate[$items]
    {
        $this->fields = $items;
        $havefailures = false;
        foreach[$items as $key=>$val]
        {
            if[[strlen[$val] == 0 || array_search[$key, $this->validations] === false] && array_search[$key, $this->mandatories] === false] 
            {
                $this->corrects[] = $key;
                continue;
            }
            $result = self::validateItem[$val, $this->validations[$key]];
            if[$result === false] {
                $havefailures = true;
                $this->addError[$key, $this->validations[$key]];
            }
            else
            {
                $this->corrects[] = $key;
            }
        }
    
        return[!$havefailures];
    }

    /**
     *
     *  Adds unvalidated class to thos elements that are not validated. Removes them from classes that are.
     */
    public function getScript[] {
        if[!empty[$this->errors]]
        {
            $errors = array[];
            foreach[$this->errors as $key=>$val] { $errors[] = "'INPUT[name={$key}]'"; }

            $output = '$$['.implode[',', $errors].'].addClass["unvalidated"];'; 
            $output .= "new FormValidator[].showMessage[];";
        }
        if[!empty[$this->corrects]]
        {
            $corrects = array[];
            foreach[$this->corrects as $key] { $corrects[] = "'INPUT[name={$key}]'"; }
            $output .= '$$['.implode[',', $corrects].'].removeClass["unvalidated"];';   
        }
        $output = "";
        return[$output];
    }


    /**
     *
     * Sanitizes an array of items according to the $this->sanitations
     * sanitations will be standard of type string, but can also be specified.
     * For ease of use, this syntax is accepted:
     * $sanitations = array['fieldname', 'otherfieldname'=>'float'];
     */
    public function sanitize[$items]
    {
        foreach[$items as $key=>$val]
        {
            if[array_search[$key, $this->sanitations] === false && !array_key_exists[$key, $this->sanitations]] continue;
            $items[$key] = self::sanitizeItem[$val, $this->validations[$key]];
        }
        return[$items];
    }


    /**
     *
     * Adds an error to the errors array.
     */ 
    private function addError[$field, $type='string']
    {
        $this->errors[$field] = $type;
    }

    /**
     *
     * Sanitize a single var according to $type.
     * Allows for static calling to allow simple sanitization
     */
    public static function sanitizeItem[$var, $type]
    {
        $flags = NULL;
        switch[$type]
        {
            case 'url':
                $filter = FILTER_SANITIZE_URL;
            break;
            case 'int':
                $filter = FILTER_SANITIZE_NUMBER_INT;
            break;
            case 'float':
                $filter = FILTER_SANITIZE_NUMBER_FLOAT;
                $flags = FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND;
            break;
            case 'email':
                $var = substr[$var, 0, 254];
                $filter = FILTER_SANITIZE_EMAIL;
            break;
            case 'string':
            default:
                $filter = FILTER_SANITIZE_STRING;
                $flags = FILTER_FLAG_NO_ENCODE_QUOTES;
            break;
             
        }
        $output = filter_var[$var, $filter, $flags];        
        return[$output];
    }
    
    /** 
     *
     * Validates a single var according to $type.
     * Allows for static calling to allow simple validation.
     *
     */
    public static function validateItem[$var, $type]
    {
        if[array_key_exists[$type, self::$regexes]]
        {
            $returnval =  filter_var[$var, FILTER_VALIDATE_REGEXP, array["options"=> array["regexp"=>'!'.self::$regexes[$type].'!i']]] !== false;
            return[$returnval];
        }
        $filter = false;
        switch[$type]
        {
            case 'email':
                $var = substr[$var, 0, 254];
                $filter = FILTER_VALIDATE_EMAIL;    
            break;
            case 'int':
                $filter = FILTER_VALIDATE_INT;
            break;
            case 'boolean':
                $filter = FILTER_VALIDATE_BOOLEAN;
            break;
            case 'ip':
                $filter = FILTER_VALIDATE_IP;
            break;
            case 'url':
                $filter = FILTER_VALIDATE_URL;
            break;
        }
        return [$filter === false] ? false : filter_var[$var, $filter] !== false ? true : false;
    }       
    


}

Tất nhiên, hãy nhớ rằng bạn cũng cần thực hiện thoát truy vấn sql tùy thuộc vào loại db bạn đang sử dụng [ví dụ: mysql_real_escape_string[] vô dụng đối với máy chủ sql]. Bạn có thể muốn tự động xử lý việc này ở lớp ứng dụng thích hợp của mình như ORM. Ngoài ra, như đã đề cập ở trên. để xuất ra html, hãy sử dụng các chức năng chuyên dụng khác của php như htmlspecialchars;]

Để thực sự cho phép đầu vào HTML với các lớp và/hoặc thẻ bị loại bỏ như vậy phụ thuộc vào một trong các gói xác thực xss chuyên dụng. KHÔNG VIẾT CÁC REGEX CỦA RIÊNG BẠN ĐỂ PHÂN TÍCH HTML

Làm cách nào để khử trùng mã PHP?

Các phương pháp làm sạch đầu vào của người dùng bằng PHP. .
Sử dụng các phiên bản hiện đại của MySQL và PHP
Đặt bộ ký tự một cách rõ ràng. $mysqli->set_charset["utf8"]; .
Sử dụng bộ ký tự an toàn. .
Sử dụng chức năng không gian. .
Kiểm tra biến chứa những gì bạn đang mong đợi

Vệ sinh là gì?

Khử trùng dữ liệu là quá trình xóa hoặc hủy vĩnh viễn dữ liệu được lưu trữ trên thiết bị bộ nhớ [ổ cứng, bộ nhớ flash/SSD, thiết bị di động, CD và DVD, v.v. ] hoặc ở dạng bản cứng .

Vệ sinh trong lập trình là gì?

Khử trùng HTML là quá trình kiểm tra tài liệu HTML và tạo tài liệu HTML mới chỉ giữ lại bất kỳ thẻ nào được chỉ định là “an toàn” và mong muốn. HTML sanitization can be used to protect against cross-site scripting [XSS] attacks by sanitizing any HTML code submitted by a user.

Sự khác biệt giữa xác thực và vệ sinh trong PHP là gì?

Xác thực kiểm tra xem đầu vào có đáp ứng một bộ tiêu chí hay không [chẳng hạn như một chuỗi không chứa dấu nháy đơn độc lập]. Sanitization sửa đổi đầu vào để đảm bảo rằng nó hợp lệ [chẳng hạn như nhân đôi dấu nháy đơn]. Thông thường, bạn sẽ kết hợp hai kỹ thuật này để bảo vệ chuyên sâu cho ứng dụng của mình

Chủ Đề