Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Enter i obrona przed sql injection., Czyli posty i komentarze.
nekomata
post
Post #1





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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.


--------------------
Go to the top of the page
+Quote Post
nekomata
post
Post #3





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




To już nie jest zabezpieczenie przed sqlinjection.
Dobrym rozwiązaniem jest stosowanie HTML Puryfier, Tidy albo zastosowanie składni bbcode.


--------------------
Go to the top of the page
+Quote Post
lDoran
post
Post #5





Grupa: Zarejestrowani
Postów: 172
Pomógł: 13
Dołączył: 15.11.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nekomata
post
Post #6





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował nekomata 18.11.2010, 09:59:07
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 07:48