Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Enter i obrona przed sql injection.
Forum PHP.pl > Forum > Przedszkole
nekomata
Otóż pisze sobie taki prosty portalik i zastanawiam jak się zabezpieczyć przed sql injection na razie mam coś takiego.
  1. function strip_html_tags( $text )
  2. {
  3. $text = preg_replace(
  4. // Remove invisible content
  5. '@<head[^>]*?>.*?</head>@siu',
  6. '@<style[^>]*?>.*?</style>@siu',
  7. '@<script[^>]*?.*?</script>@siu',
  8. '@<object[^>]*?.*?</object>@siu',
  9. '@<embed[^>]*?.*?</embed>@siu',
  10. '@<applet[^>]*?.*?</applet>@siu',
  11. '@<noframes[^>]*?.*?</noframes>@siu',
  12. '@<noscript[^>]*?.*?</noscript>@siu',
  13. '@<noembed[^>]*?.*?</noembed>@siu',
  14. // Add line breaks before and after blocks
  15. '@</?((address)|(blockquote)|(center)|(del))@iu',
  16. '@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu',
  17. '@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu',
  18. '@</?((table)|(th)|(td)|(caption))@iu',
  19. '@</?((form)|(button)|(fieldset)|(legend)|(input))@iu',
  20. '@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu',
  21. '@</?((frameset)|(frame)|(iframe))@iu',
  22. ),
  23. ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  24. "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0",
  25. "\n\$0", "\n\$0",
  26. ),
  27. $text );
  28. return strip_tags( $text );
  29. }
  30. //strip_html_tags($_POST['info']);
  31. $x = array_map(trim,$_POST);
  32. $y = array_map(strip_html_tags,$x);
  33. $_POST = $z;

Czy takie cos zapewni mi "względne" bezpieczeństwo?Dodatkowo po "przetworzeniu" tekstu przez te "defensywe" nie przechodzi do następnej lini jednak w formularzu przechodziło.Co mogę z tym zrobić?Albo jak dodatkowo się zabezpieczyć?
wookieb
W zależności od sterownika
PDO:
http://pl2.php.net/manual/pl/pdo.quote.php
LUB
http://pl2.php.net/manual/pl/pdo.prepare.php

Mysql:
http://pl2.php.net/mysql_real_escape_string

Ot twoje cale zabezpieczenie przed sql injection.
nekomata
Rozumiem, tylko np. jakbym chciał podgląd postu to tez muszę się zabezpieczyć przed jakimś nieoczekiwanym HTML i PHP racja?Co byście polecili na takie sprawy?
wookieb
To już nie jest zabezpieczenie przed sqlinjection.
Dobrym rozwiązaniem jest stosowanie HTML Puryfier, Tidy albo zastosowanie składni bbcode.
lDoran
Możesz napisać własną klasę bbcode, każdy post możesz sprawdzać funkcją htmlspecialchars(), rozwiązań jest dużo wszystko zależy od wiedzy i wyobraźni programisty.
nekomata
To wszystko co chciałbym wiedzieć, dzięki za szybką odpowiedz... chociaż nadal nie wiem czemu mi te entery w textarea pomija..

[Edit]
Rozwiązanie na entery + BBcode zamieszczam jakby ktoś potrzebował :
  1.  
  2. function bbcode($zrodlo){
  3. $zrodlo=trim($zrodlo);
  4. $zrodlo=htmlspecialchars($zrodlo);
  5. $zrodlo=preg_replace("#\[b\](.*?)\[/b\]#si", "<b>\\1</b>", $zrodlo);
  6. $zrodlo=preg_replace("#\[i\](.*?)\[/i\]#si", "<i>\\1</i>", $zrodlo);
  7. $zrodlo=preg_replace("#\[u\](.*?)\[/u\]#si", "<u>\\1</u>", $zrodlo);
  8. $zrodlo=preg_replace("#\[small\](.*?)\[/small\]#si", "<small>\\1</small>", $zrodlo);
  9. $zrodlo=preg_replace("#\[big\](.*?)\[/big\]#si", "<big>\\1</big>", $zrodlo);
  10. $zrodlo=preg_replace("#\[p\](.*?)\[\/p\]#si", "<p>\\1</p>", $zrodlo);
  11. $zrodlo=preg_replace("#\[center\](.*?)\[\/center\]#si", "<center>\\1</center>", $zrodlo);
  12. $zrodlo=preg_replace("#\[color=(http://)?(.*?)\](.*?)\[/color\]#si", "<span style=\"color:\\2\">\\3</span>", $zrodlo);
  13. $zrodlo=preg_replace("#\[size=(http://)?(.*?)\](.*?)\[/size\]#si", "<span style=\"font-size:\\2\">\\3</span>", $zrodlo);
  14. $zrodlo=preg_replace("#\[img\](.*?)\[/img\]#si", "<img src=\"\\1\" border=\"0\" alt=\"No img\" />", $zrodlo);
  15. $zrodlo=preg_replace("#\[hr=([0-9]{1,2}|100)\]#si", "<hr class=\"linia\" width=\"\\1%\">", $zrodlo);
  16. $zrodlo=nl2br($zrodlo);
  17. return $zrodlo;
  18. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.