Puncte:2

Is the following code secure when saving data to database?

drapel th
fin

I have a form that I want to save to database. Do you consider the following code safe? I get the value directly from the $form_state and pass it into query. My understanding, it query will do the safe filter for me.

       $db = \Drupal::service('database');

       
        $result = $db->insert('invitation')
        ->fields([
            'guest_email' => $form_state->getValue('email'),
            'guest_name' => $form_state->getValue('name'),
            'guest_type' => $form_satte->getValue('type'),
            'created' => \Drupal::time()->getRequestTime(),
        ])
        ->execute();
    
Puncte:1
drapel us

Atâta timp cât valorile introduse de la utilizatori nu sunt concatenate direct în șirul utilizat pentru instrucțiunea SQL, nu ar trebui să existe niciun risc de securitate.

Codul afișat în întrebare este sigur deoarece folosește metodele care se ocupă de manipularea valorilor introduse de utilizatori pentru a evita orice posibilă problemă.

Următorul cod este un exemplu de ceea ce trebuie evitat.

$db = \Drupal::service('baza de date');
$db->query("SELECT * FROM {users} WHERE nume = '" . $form_state->getValue('nume') . "'");

Dacă valoarea introdusă pentru Nume au fost ' SAU '1'='1' --, interogarea executată va deveni următoarea. (-- este începutul comentariului.)

SELECTAȚI * FROM {users} WHERE nume = '' SAU '1'='1' --

Dacă sunt permise mai multe instrucțiuni, valoarea introdusă de la utilizator ar putea, de asemenea, să șteargă, de exemplu, un tabel al bazei de date, ceea ce ar putea fi posibil prin introducerea A'; DROP TABLE {utilizatori}; --. În acest caz, interogarea executată va deveni următoarea. (Comentariul de la sfârșit este doar pentru a lăsa motorul bazei de date să ignore restul interogării.)

SELECT * FROM {users} WHERE nume = 'a'; DROP TABLE {utilizatori}; --

Valorile introduse de utilizatori trebuie să fie igienizate corespunzător atunci când sunt afișate într-o pagină. Ele nu ar trebui să fie igienizate pentru asta atunci când sunt salvate în baza de date.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.