Dezinfikujte vstup pomocí PHP

Původně zveřejněno @ https://codeanddeploy.com navštivte a stáhněte si ukázkový kód:https://codeanddeploy.com/blog/php/sanitize-input-using-php

V tomto tutoriálu provedeme dezinfekci vstupu v PHP před jeho uložením do naší databáze. Toto je jeden z nejdůležitějších kroků při ukládání záznamů online, protože nevíme, co si naši návštěvníci myslí, a možná někteří z nich poskytují naší aplikaci škodlivá data. Pro více informací navštivte prosím sanitize filters na oficiálních stránkách PHP.

Takže ve svých předchozích návodech přidávám funkci, která vyčistí vstup před jeho uložením do naší databáze. Podívejte se prosím níže na ukázkový kód.

function sanitize($input) 
{
    if(is_array($input)):
        foreach($input as $key=>$value):
            $result[$key] = sanitize($value);
        endforeach;
    else:
        $result = htmlentities($input, ENT_QUOTES, 'UTF-8');
    endif;

    return $result;
}

Jak můžete vidět z výše uvedeného kódu, vytvářím funkci sanitize() uvnitř functions.php soubor. A mám jeden parametr nazvaný $input variable. Pak zkontroluji, zda je proměnná $vstupní pole, pokud ano, pak zacyklím hodnotu $vstupní proměnné a zavolám funkci znovu s hodnotou řetězce.

Pokud tedy hodnota proměnné $input není pole, zavolá funkci htmlentities(), aby převedla škodlivé znaky na entity HTML. Tuto funkci tedy použijte, pokud váš návštěvník zadá skript, jako je tento:

<script> alert("This is a message"); </script>

Poté převede postavy do tohoto.

&lt;script&gt;alert( &quot;This is a message&quot; );&lt;/script&gt;

Jak můžete vidět, skript se již při prohlížení nebude číst, protože jsme jej již převedli na entity.

Takže dále zavolám funkci sanitize() uvnitř mého save.php soubor zde je, jak to vypadá.

$request = sanitize($_REQUEST);

Takže před uložením do naší databáze vyčistím proměnnou $_REQUEST Super Global.

Zde je úplný kód mého save.php soubor.

<?php
    // include config file
    require_once 'config.php';

    //a PHP Super Global variable which used to collect data after submitting it from the form
    // Sanitize fist the values of this variable
    $request = sanitize($_REQUEST);
    //get email address value
    $email = $request['email']; 
    //get first name value
    $first_name = $request['first_name'];
    //get last name value 
    $last_name = $request['last_name'];
    //get address value
    $address = $request['address'];

    // Defined $result as array
    $result = [];

    if(!isEmailValid($email)):
        $result['has_error'] = 1;
        $result['response'] = "Email address is invalid.";
    elseif(isEmailExists($db, "employees", $email)):
        $result['has_error'] = 1;
        $result['response'] = "Email address is already exists.";
    endif;

    // Check if no errors
    if(!count($result)):
        // SQL Statement
        $sql = "INSERT INTO employees (email, first_name, last_name, address)
        VALUES ('".$email."', '".$first_name."', '".$last_name."', '".$address."')";

        // Process the query
        if ($db->query($sql)) {
          $result['response'] = "Employee has been created.";
        } else {
          $result['response'] = "Error: " . $sql . "<br>" . $db->error;
        }

        // Close the connection after using it
        $db->close();
    endif;

    // Encode array into json format
    echo json_encode($result);


?>

Dobře, nyní jste připraveni a vaše data jsou čistá, než je zpracujeme. Takže doufám, že už máte svou představu, jak je to důležité, a implementujete ji do svých projektů. Doufám, že vám tento návod pomůže. Pokud si chcete tento kód stáhnout, navštivte prosím https://codeanddeploy.com/blog/php/sanitize-input-using-php.

Děkujeme a přejeme hodně štěstí :)