![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 137 Pomógł: 2 Dołączył: 2.07.2007 Skąd: Ostrzeszów Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam pytanie odnośnie PDO i wstrzykiwania kodu. Otóż mam taki fragment:
i gdy w loginie wpisuje np test' -- (po myślnikach jeszcze spacja) to nie da się zalogować, a w przypadku mysqli bez użycia real_escape_string już da. Myślałem, że bindValue ma zabezpieczenia, a czy execute je też tworzy ? czy w przypadku PDO kod się inaczej wstrzykuje - jeśli tak to jak ? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
To co robisz w execute to właśnie skrócone bindowanie. Tak się nie da nic wstrzyknąć.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 137 Pomógł: 2 Dołączył: 2.07.2007 Skąd: Ostrzeszów Ostrzeżenie: (0%) ![]() ![]() |
W zasadzie bindValue mija się trochę z celem, bo raz, że jest dłuższe w zapisie, to i tak trzeba stosować execute potem.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
PDO ogólnie ma taką ideę, że nie musisz w ogóle myśleć nad jakimikolwiek zabezpieczeniami bo PDO samo sobie z filtracją poradzi, Ty jedynie co to możesz ew. zdefiniować podczas bindowania czy chcesz otrzymać wartość liczbową (INT) czy tekst (STR), tyle.
Ja na Twoim miejscu bindowałbym te wartości (IMG:style_emoticons/default/smile.gif) Ten post edytował Michael2318 25.06.2014, 22:42:56 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Nie prawda, powinno się stosować bindValue/Param i ogólnie wszędzie tak się stosuje.
Poza tym tutaj w execute wymuszony jest string, w bindValue/Param możesz przesłać parametr jako INT na przykład. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
@Michael2318: Nie zgadzam się. Trzeba pamiętać, że używanie PDO nie zwalnia z myślenia i czasami (zwłaszcza dla mało doświadcznych programistów) może dawać złudne poczucie "bezpieczeństwa". Często się zdarzają błędy typu SQL injection, pomimo "używania" PDO.
|
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
PDO nic nie pomoże jeśli ktoś wsadzi $_GET/$_POST do sqla w stylu $sql = "SELECT * FROM foo WHERE id=".$_GET['id'];
Nadal będziemy mieć podatność mimo super pdo. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
Dlatego dodałem, że jedyne co musi zrobić to zbindować daną wartość i określić czy spodziewa się stringa czy wartości liczbowej (int) w rezultacie (IMG:style_emoticons/default/smile.gif)
Ten post edytował Michael2318 26.06.2014, 08:05:03 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 137 Pomógł: 2 Dołączył: 2.07.2007 Skąd: Ostrzeszów Ostrzeżenie: (0%) ![]() ![]() |
Mówicie, że z bindValue należy korzystać, bo określasz czego się spodziewasz, więc zrobiłem test
gdzie liczba1 to int, liczba2 to double, liczba3 to string. Podaje liczby i nie ma problemu zapisuje w bazie, więc w sumie zastanawiam się nad sensem stosowania bindValue. Jak np podam test, test, test to zapisze 0, 0, test, jak 1test, 2test, 3test to zapisze 1, 2, 3, czyli w sumie execute ładnie parsuje. Ten post edytował smiady 26.06.2014, 20:12:21 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
smiady, zauważ, że tak czy siak w pewnym sensie filtrujesz te dane, tyle że nie przez bindvalue, a przez execute. Ważne, że nie puszcza się tych danych na ślepo, tak jak zapodał to Spawn w przykładzie.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 137 Pomógł: 2 Dołączył: 2.07.2007 Skąd: Ostrzeszów Ostrzeżenie: (0%) ![]() ![]() |
OK, Michael2318 zgadam się. Tylko zwracam uwagę na to co napisał Damonsson, że execute wymusza zawsze string i nie powinno się tak robić, ale w sumie jak się poda int to nic złego się nie stanie (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Wszystkie zmienne w $_GET/$_POST/$_COOKIE/$_REQUEST są stringami, chyba że wcześniej w kodzie nadpisałeś ich wartość.
2. PDOStatement::execute z argumentem to nic innego jak skrócona forma:
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 09:03 |