sql >> Database >  >> RDS >> Mysql

Wat is de veiligste manier om html/css/js toe te voegen aan mysql?

Ja, MySQL kan elk type tekst technisch veilig opslaan. Wat betekent dat MySQL de tekst opslaat zoals deze is en deze opnieuw zal retourneren zonder gegevens te verliezen.

Mysql verschilt niet tussen de inhoud van de tekst, dus het maakt niet uit of het HTML, CSS, JS-code of de laatste e-mail van je vrienden is.

Als u de tekst echter later uitvoert, moet u ervoor zorgen dat er geen ongewenste code-injectie plaatsvindt nadat u de gegevens uit mysql hebt gehaald. Maar dat heeft eigenlijk niets met MySQL te maken.

Om SQL veiliger te maken, geeft u de database-handle door aan mysql_real_escape_string of nog beter gebruik MySQLi en/of BOB en verklaringen opgesteld.

Uw code

Je code ziet eruit alsof je veel probeert om iets te voorkomen, maar uiteindelijk blijkt het vrij nutteloos:

function filter($data) {
$data = trim(htmlentities(strip_tags($data)));

if (get_magic_quotes_gpc())
    $data = stripslashes($data);
    $data= strip_tags($data);

$data = mysql_real_escape_string($data);

return $data;}

Normaliseer de gegevens voordat u ze verwerkt

Allereerst moet u de positie van de cheque voor get_magic_quotes_gpc wijzigen om de gegevens te normaliseren waaraan de functie werkt. Het zou nog beter zijn als uw toepassing er niet op zou vertrouwen, maar gewoon weigert te werken als die optie is ingeschakeld - zie hier deze belangrijke informatie hierover als je om veiligheid geeft.

Maar laten we voor de veiligheid van uw geposte code eerst de invoerwaarde naar de functie normaliseren voordat we deze verder verwerken. Dit wordt gedaan door het vinkje naar de bovenkant van de functie te verplaatsen.

function filter($data)
{
   // normalize $data because of get_magic_quotes_gpc
   $dataNeedsStripSlashes = get_magic_quotes_gpc();
   if ($dataNeedsStripSlashes)
   {
     $data = stripslashes($data);
   }

   // normalize $data because of whitespace on beginning and end
   $data = trim($data);

   // strip tags
   $data = strip_tags($data);

   // replace characters with their HTML entitites
   $data = htmlentities($data);

   // mysql escape string    
   $data = mysql_real_escape_string($data);

   return $data;
 }

In deze gewijzigde functie zijn de dingen met magische aanhalingstekens (die je niet zou moeten gebruiken) naar de bovenkant ervan verplaatst. Dit zorgt ervoor dat, ongeacht of die optie aan of uit staat, de gegevens altijd op dezelfde manier worden verwerkt. Uw functie heeft dit niet gedaan, het zou verschillende resultaten hebben opgeleverd voor dezelfde doorgegeven gegevens. Dit is dus opgelost.

Meer problemen met uw functie

Zelfs de functie ziet er nu beter uit, er zijn nog steeds veel problemen. Het is bijvoorbeeld onduidelijk wat de functie eigenlijk doet. Het doet veel dingen tegelijk en sommige zijn tegenstrijdig:

  • Het verwijdert HTML-tags, wat een teken is dat $data mag geen HTML bevatten
  • Maar dan converteer je de tekst van $data daadwerkelijk HTML-entiteiten moeten bevatten.

Dus wat moeten de gegevens zijn? HTML-code of niet? Het introduceert geen extra beveiliging als dingen onduidelijk worden, omdat dit ten goede komt dat er fouten in je programma komen en uiteindelijk zelfs je veiligheidsmaatregelen passeren.

Gooi de code dus gewoon weg en denk aan het volgende:

  • Als de invoer voor uw toepassing ongeldig is, moet u deze niet filteren. Voorkom in plaats daarvan verder gebruik van ongeldige invoer. Je hebt dus een functie nodig om invoer te valideren voordat je er gebruik van maakt.
  • Wijzig gegevens niet alleen omdat je denkt dit kan iets veiliger maken. Wijzig en codeer in plaats daarvan gegevens waar dat nodig en gepast is.
    • Zorg ervoor dat je applicatie alleen werkt als magische aanhalingstekens zijn uitgeschakeld. Vertrouwen op deze functie wordt ten zeerste afgeraden. En dan is het niet nodig om dat helemaal in je code te controleren.
    • Om iets veilig in de database op te slaan, moet u de gegevens escapen voordat u het alleen in de query gebruikt. Niet op een andere plaats van uw aanvraag. Gebruik daarvoor voorbereide uitspraken.
    • Het is niet nodig om de gegevens door elkaar te halen voordat je ze in de database plaatst als ze geldig zijn. Maar je moet het correct coderen wanneer je het naar de webpagina stuurt . En alleen daar weet een applicatie wel in welke encoding dit moet. Dat weet je niet als je de gegevens in de database plaatst.

Dus als je je code veiliger wilt maken, gaat het er niet om een ​​heleboel functies op sommige gegevens te gooien omdat je denkt dat die met beveiliging te maken hebben. Door dit te doen, maakt u uw software niet veiliger, maar minder veilig.

  1. Vertrouw nooit gebruikersgegevens.
  2. Zorg ervoor dat de gegevens de indeling hebben die u nodig hebt voorafgaande verwerking .
  3. Gebruik de juiste tool voor de klus op de juiste plaats.
  4. Gebruik tools nooit naar schatting. Krijg in plaats daarvan kennis, dat loont niet alleen qua beveiliging.



  1. Inleiding tot Oracle RMAN

  2. Hoe de id-kolom opnieuw bij te werken vanaf 1

  3. Ontvang WP-berichten op basis van meerdere metasleutel/waarde-paren met IN

  4. Externe sleutel van het type char toevoegen in mysql