Basisbeveiliging tegen Mysql-injecties

Door Jur , 20 jaar geleden, 6.064x bekeken

Deze functie gaat alle variabelen door en beveiligt elk met mysql_real_escape_string, mysql_escape_string of addslashes. Zelfs arrays worden meegenomen.

In de meest ideale situatie laadt je deze script voor elk ander script. Je dient helaas, i.v.m. mysql_real_escape_string, de script net onder je DB-connectie te zetten, anders geeft deze een error terug.

Gesponsorde koppelingen

PHP script bestanden

  1. basisbeveiliging-tegen-mysqlinjecties

 

Er zijn 8 reacties op 'Basisbeveiliging tegen mysql injecties'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


20 jaar geleden
 
0 +1 -0 -1
Als ik nu eens een array in een array in een array heb?

Daarnaast zie ik de meerwaarde niet van mysql_escape_string boven mysql_real_escape_string.
TJVB tvb
TJVB tvb
20 jaar geleden
 
0 +1 -0 -1
http://php.net/mysql_escape_string:
This function will escape the unescaped_string , so that it is safe to place it in a mysql_query(). This function is deprecated.

This function is identical to mysql_real_escape_string() except that mysql_real_escape_string() takes a connection handler and escapes the string according to the current character set. mysql_escape_string() does not take a connection argument and does not respect the current charset setting.

Oftewel dubbel werk en gebruik maken van een deprecated functie terwijl dat niet nodig is.
Verder is het gebruik van reqursie voor arrays een aanraden (zodat je de array in array in array ook kunt afhandelen)
PHP Newbie
PHP Newbie
20 jaar geleden
 
0 +1 -0 -1
Ook addslashes is overbodig. Je wilt helemaal geen data met slashes in je database hebben staan...
Bart Smulders
Bart Smulders
20 jaar geleden
 
0 +1 -0 -1
en stel je nu maar eens voor dat je html code in je tabel stopt. <p class="blaat" >iets</p> word dan addslashes + escape string \\"blaat\\"
Jur
Jur
20 jaar geleden
 
0 +1 -0 -1
@Webmakerij, TJVB & PHP-newbie:
De functies staan hierboven in een array; de nieuwste boven en de oudste (met als failsafe "addslashes"). Via de foreach bovenaan lopen we de hele array door met de functie "function_exists".

Als deze "function_exists" zegt dat de opgegeven functienaam bestaat én alleen als de variabele $f2use nog niet bestaat zetten we de functienaam in de $f2use variabele. Deze check pakt de correcte functie die bij de PHP versie past. In het kort betekent dit dat deze "secure_it" functie ook in alle oude PHP-versies gebruikt kan worden.

In de nieuwste installaties zal dus alleen "mysql_real_escape_string" gebruikt worden. Voor hostings die PHP lager dan 4.3.0 draaien zal dan automatischo mysql_escape_string() gepakt worden.

Overigens is deze functie al recursief opgebouwd, check regel 52 t/m 55. deze regel kan ongelimiteerd arrays afhandelen.

Indien PHP ooit met een nieuwere mysql-beveiliging komt kan je die gewoon weer bovenaan in de array op regel 21 toevoegen.
Jesper Diovo
Jesper Diovo
20 jaar geleden
 
0 +1 -0 -1
Veel makkelijker:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
function mysql_real_escape_array($array) {
  if(is_array($array)) {
    foreach($array as $key => $value) {
      if(is_array($value)) {
        $array[$key] = mysql_real_escape_array($value);
      }
else {
        $array[$key] = mysql_real_escape_string($value);
      }
    }
  }
else {
    $array = mysql_real_escape_string($array);
  }

  return $array;
}

?>


Ik geloof ook niet dat mysql_real_escape_string snel faalt...


20 jaar geleden
 
0 +1 -0 -1
Misschien moet je je afvragen waarom je nog PHP 4.3 zou willen ondersteunen c.q. PHP 4.x zou willen ondersteunen.

Het elke keer laten draaien van een function_exists is ook een beetje overbodig. Dan kan je beter iets er hard coded inzetten lijkt me.

Ik zie 2 keer is_array() staan en daarna ga je de functie pas opnieuw aanroepen. Is dit niet een beetje half recursief?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Marien xD
Marien xD
20 jaar geleden
 
0 +1 -0 -1
Ik vind het ook hoogst raar om DATABASE escaping toe te passen op alle POST/GET/SERVER variabelen. Database escaping moet gebeuren net voordat je het in een query stopt. Dus je krijgt eerst de validatie of het wel correcte info is (van een form of url) en zo ja, in je query de escape functie er over heen.

Ik zelf geloof niet echt in een functie als deze. Je kan beter een wrapper schrijven die het geheel doet met mysql_real_escape_string en als die niet aanwezig is gewoon een custom escaping doen. Die werkt altijd. Dan is het pas een krachtige functie.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. basisbeveiliging-tegen-mysqlinjecties

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.