sql >> Database >  >> RDS >> Mysql

PHP beveiligde gebruikersvariabele

Er zijn twee zeer belangrijke dingen die u moet doen om ernstige beveiligingsproblemen te voorkomen.

  1. U moet aan de gebruikersinvoer ontsnappen voordat u deze in uw SQL-query plaatst. Ontsnappen betekent ontsnappen aan alle speciale tekens zoals '; gelukkig is er een functie die het al automatisch doet:mysql_real_escape_string .

    Als u niet ontsnapt aan gebruikersinvoer, kunnen er vervelende dingen gebeuren. Stel je voor dat je zoekopdracht INSERT INTO userdata VALUES ('$user_data') is . Stel je nu voor dat de gebruiker '; DROP DATABASE userdata; .

    Als u er niet aan ontsnapt, wordt uw vraag:INSERT INTO userdata VALUES (''; DROP DATABASE userdata;') . Je kunt je voorstellen dat dit niet goed is:als je multi-statements hebt ingeschakeld, kun je afscheid nemen van je database. Dit heet een SQL-injectie aanval.

  2. Wanneer u uw variabele naar de gebruiker uitvoert, moet u ook de speciale HTML-tekens op de juiste manier vervangen door HTML-entiteiten. Gelukkig is er ook een functie om dat te doen:htmlspecialchars() . Het transformeert de speciale HTML-tekens zoals < naar < .

    Dit lijkt een probleem dat vaak wordt onderschat, maar in werkelijkheid is het zeer ernstig. Stel je voor dat $user_data bevat <script>SomeNastyScript()</script> . Het zou bestaande kwetsbaarheden in de browser van uw gebruikers kunnen misbruiken, of het zou een niet-HTTPOnly-cookie (die opgeslagen wachtwoorden kan bevatten) naar de aanvaller kunnen sturen, of het zou de gebruiker kunnen misleiden om zijn wachtwoord te schrijven op een formulier dat is gegenereerd door de manipulatie van de DOM (mogelijk in javascript), of een heleboel andere slechte dingen.

    Dit heet XSS (Cross-site scripting).

Korte versie

  1. Bel mysql_real_escape_string op de tekenreeks voordat u deze in uw SQL-query invoegt (maar niet wanneer u echo het).

  2. Bel htmlspecialchars op de string voordat u deze aan de gebruiker toont (maar niet wanneer u deze in de database plaatst).



  1. Fix Msg 512 "Subquery heeft meer dan 1 waarde geretourneerd" in SQL Server

  2. Prestatiewaarde van COMB-gidsen

  3. Caculate punt 50 mijl afstand (Noord, 45% NE, 45% ZW)

  4. Een externe MySQL-databaseverbinding instellen