![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
nie wiem jak właściwie zatytułować mój problem, ale mam nadzieję, że rozwinięcie wszystko wyjaśni. Mianowicie utworzyłem system dodawania tekstu za pomocą pól tekstowych <textarea>. Owy tekst normalnie jest przesyłany metodą POST, lecz problem pojawia się gdy interpreter php otrzymuje polecenie dodania ww. tekstu do bazy danych MySQL:
W takim przypadku, jeżeli do formularza wpisze się cudzysłów zostaje przerwany kod i pojawia się "Błąd!", co rozumiem, gdyż interpreter może wtedy uznać zmienną $tekst za zamknięcie funkcji mysql. Jednakże zastanawiam się jak wyeliminować taką niedogodność. Nie chciałbym użytkownikom mojej strony kazać wpisywać w formularz \" zamiast normalnego cudzysłowu. Próbowałem już zamienić cudzysłowy na apostrofy, ale wtedy automatycznie występuje niemożność wpisywania apostrofu w formularzu. Czy jest jakaś możliwość, aby udostępnić w tej sytuacji swobodne wpisywanie cudzysłowów oraz apostrofów? Pozdrawiam |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 251 Pomógł: 34 Dołączył: 7.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Tak, użyj: htmlspecialchars();
http://php.net/manual/en/function.htmlspecialchars.php Dodatkowo, powinieneś, a nawet musisz użyć: mysql_real_escape_string() http://php.net/manual/en/function.mysql-re...cape-string.php Ten post edytował DiH 18.02.2010, 01:05:43 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 127 Pomógł: 32 Dołączył: 8.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Z tego : "' & rsquo ;','& #92 ;'" - usuń spacje, bo nie moge coś na forum tego wstawić. Ten post edytował altruista2 18.02.2010, 01:14:29 -------------------- Jeśli Ci pomogłem kliknij pomógł. W ten sposób temat zaświeci się na żółto i użytkownicy którzy pomagają nie będą musieli niepotrzebnie klikać. Dziękuję.
"Pomaganie" |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 251 Pomógł: 34 Dołączył: 7.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
@up Twój kod nadal pozwala na położenie zarówno mysql, jak i php poprzez zwykłe """
' - czyli apostrof zapisany jako encja to ' a nie & rsquo; " - zapisujemy jako & quot; Ten post edytował DiH 18.02.2010, 01:28:24 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dodawanie \ jest spowodowane włączeniem magic_quotes, jeśli masz ten mechanizm włączony nie musisz używać mysql_real_escape_string (bo jego użycie spowoduje ododanie \ do " a pożniej jeszcze magic_quotes to zrobi). Zamiast tego wpisz tak jak ci napisałem wtedy htmlenties zamieni znaki takie jak <,>," itp na encje czyli < a przeglądarka gdy otrzyma taki kod poprostu wyświetli odpowiadająca im encje a nie wykona polecenia, dodatkowo do bazy danych zapisz się kod z encjami. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
No to na starcie niech sprawdzi czy magic-qoutes włączone czy nie
![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję bardzo za pomoc.
![]() Jak się okazało najprostszą oraz najkrótszą metodą (dla mnie) jest zastosowanie funkcji htmlspecialchars(); poleconej przez DiHa. Próbowałem również stosować htmlentities, jednakże po użyciu owej funkcji, mimo wyeliminowania problemu wielokrotnego cudzysłowu, niepoprawnie były wyświetlane polskie znaki (krzaczki). To tyle tytułem podsumowania. Jeszcze raz dziękuję i pozdrawiam serdecznie ![]() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 5 Dołączył: 22.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
jeżeli chcesz dodawać dane z post do zapytania powienieneś je zabezpieczyć przed mysql_injection.
strin mysql_real_escape_string($string, [$connection id]); patrz: twoje zapytanie to: INSERT INTO komentarze VALUES('$_POST["tekst"]'); A teraz ktoś ci wpisze w POST: '); DELETE * from komentarze; INSERT INTO komentarze VALUES(' Z tego powstanie: INSERT INTO komentarze VALUES(''); DELETE * from komentarze; INSERT INTO komentarze VALUES(''); Czyli raczej not nice. Użycie tej funckcji zamieni ' na \'. Dzięki temu nie będzie dało się wykonać dowolnego polecenia w SQL |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 18.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję, że poruszyłeś temat SQL Injection.
![]() Poczytałem trochę więcej o samych atakach, jak również o funkcji mysql_real_escape_string, jednakże nie jestem pewien czy dobrze zrozumiałem owe treści. Dlatego też chciałbym się dowiedzieć czy zastosowanie "transformacji":
zapewni wysoki stopień bezpieczeństwa w stosunku do ataków SQL Injection ? |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 251 Pomógł: 34 Dołączył: 7.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ja używam przykładu z http://php.net/manual/en/function.mysql-re...cape-string.php, czyli na początku każdego skryptu php wstawiam:
Do tego wyłączyć raportowanie błędów i będzie prawie bezpiecznie. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 10.05.2025 - 06:52 |