sql >> Database >  >> RDS >> Mysql

Is $_SESSION veilig voor sql-injecties?

U hoeft niet echt te testen of de invoer numeriek is, omdat in MySQL elke tekenreeks, b.v. '123abc' in een numerieke context (zoals vergeleken worden met een integer kolom id ) neemt impliciet alleen de cijfers en negeert de rest. Een niet-numerieke tekenreeks zoals 'abc' heeft gewoon de gehele waarde 0 omdat er geen voorloopcijfers zijn.

Het punt is dat waarden veilig zijn voor SQL-injectie als u queryparameters gebruikt. Of de invoer afkomstig is van $_SESSION of een andere bron is niet relevant. $_SESSION is niet veilig of onveilig met betrekking tot SQL-injectie, het gaat erom hoe u de gegevens doorgeeft aan uw query.

Ik zou de code ook vereenvoudigen om de lijst met tijdelijke aanduidingen voor parameters op te maken:

$placeholders = implode(',', array_fill(1, count((array)$_SESSION['story']), '?'));

En vergeet bindParam(), geef de array gewoon door aan execute() .

//Collect all data needed
$storyQuery = openConnection() -> prepare("SELECT * FROM `stories` 
    WHERE `id` IN ({$placeholders})");
$storyQuery -> execute((array)$_SESSION['story']);
$story = $storyQuery -> fetchAll();

Opnieuw uw opmerking:

In PDO kunt u beide benoemde parameters gebruiken, zoals :id , of u kunt positionele parameters gebruiken, die altijd ? . zijn (maar meng deze twee typen niet in een bepaalde zoekopdracht, gebruik de een of de ander).

Een array doorgeven aan execute() bindt automatisch de array-elementen aan de parameters. Een eenvoudige array (d.w.z. geïndexeerd door gehele getallen) is gemakkelijk te binden aan positionele parameters.

Als u benoemde parameters gebruikt, moet u een associatieve array doorgeven waarbij de sleutels van de array overeenkomen met de parameternamen. De array-sleutels kunnen optioneel worden voorafgegaan door : maar het is niet verplicht.

Als je nieuw bent bij PDO, loont het echt de moeite om de documentatie te lezen . Er zijn codevoorbeelden en zo!



  1. Hoe MAIN mysql-database naar InnoDB te converteren vanuit MyIsam

  2. Zoek in een JSON-array naar een object dat een waarde bevat die overeenkomt met een patroon

  3. Een draaitabel maken in PostgreSQL

  4. ROWIDTOCHAR() Functie in Oracle