![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 12.07.2003 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Przesiadłem się ostanio na AdoDB i niestety napotkałem mocno denerwujący problem. Mój problem wygląda w ten sposób: Korzystam z ActiveRecord w AdoDB, gdy przesyłam z formularza POSTem zmienną zawierającą znak ', po przesłaniu dostaję już \' (POST chyba to robi automatycznie, prawda?), zapisuję to do bazy, potem odczytuję to za pomocą powiedzmy Find(), przekazuję bezpośrednio do Smarty i na ekranie mam \' zamiast '. Jak najlepiej sobie z tym poradzić żeby nie mieć niepotrzebnych slashy? Druga sprawa to czy dodatkowo powinienem używać qstr() w przypadku ActiveRecord w AdoDB i jaka jest funkcja odwrotna do qstr() w AdoDB (inaczej - qstr() to odpowiednik addslashes(), a jaki jest odpowiednik stripslashes()?)? Ten post edytował marcz 19.07.2006, 12:23:35 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Na pierwsze pytanie sam sobie odpowiedziales zadajac drugie pytanie.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 12.07.2003 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Niestety nie, przykład poniżek:
1) sposób:
2) sposób
Nie zwracajmy narazie uwagi na poprawność takiego kodu pod względem bezpieczeństwa. Chodzi o to, że jeżeli w polu o nazwie name w formularzu wpisaliśmy powiedzmy abc', to gdy zastosujemy 1 sposób mamy w bazie zapisane abc\', a jeżeli drugi sposób to mamy abc'. Drugi sposób nie wstawia niepotrzebnego backslasha, ale mimo wszystko chcę stosować Active Record, bo to naprawdę fajna sprawa (w AdoDB niestety wiele mu do doskonałości jeszcze brakuje). Moje drugie pytanie to jaką funkcję zastosować przy odczytywaniu danych z bazy, jeżeli zapisujemy stosując qstr(). |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Bo ActiveRecord automatycznie eskejpuje niebezpieczne znaki. Po odczytaniu takich danych musialbys przepuscic je przez funkcje stripslashes().
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 12.07.2003 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Szkoda, że pomyślano o tym, aby automatyzować proces w obie strony. Jeżeli przy Save() i replace() automatycznie dodajemy jakieś znaki, to przy Load() i Find() powinniśmy automatycznie je usuwać.
Tak samo jeżeli istnieje funkcja qstr() to powinna istnieć i funkcja odwrotna. Chciałem tablicę otrzymaną z bazy poprzez Find() bezpośrednio przekazać do Smarty, ale widzę, że będę musiał pisać funkcję rekurencyjną, która przejdzie przez wszystkie elementy tablicy (też te zagnieżdżone) i zrobi na nich stripslashes()... - bardzo nieeleganckie rozwiązanie do którego zmuszają nas autorzy AdoDB. A może jest na to inna metoda? Co więcej - gdy wprowadzamy ciąg //\\'' poprzez Execute() normalnie - wszystko działa jak należy, jeżeli zaś użyjemy qstr() wyskakuje wyjątek... poprostu cudownie. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 1 Dołączył: 29.07.2003 Ostrzeżenie: (10%) ![]() ![]() |
Jeżeli dobrze rozumiem AdoDB dodaje \ do ' tylko przy zapisywaniu i nie możesz tego rozpatrywać jako rzeczywiste dodanie ' do stringu: on dodaje to tylko po to, żeby kwarenda się zgadzała, tzn.
Przy odczytywaniu powinno to już wyglądać normalnie. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 4 Dołączył: 14.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
odświeżam temat, bo mam pytanie odnośnie funkcji qstr(), jeżeli użyjemy funkcji qstr() w poniższy sposób:
to czy jesteśmy całkowicie zabezpieczeni przed sql injection? Czy tylko bindowanie danych zapewnia nam ochrone przed sql injection ? Ten post edytował pabito 27.08.2014, 12:53:52 |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
qstr to na dobrą sprawę nic innego jak mysql_real_escape_string()... Ludzie od wiekow tego uzywają i jakoś zyją (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 4 Dołączył: 14.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
czyli użycie jej w moim przykładzie, zabezpiecza przed sql injection
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 17:54 |