Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pola w bazie, jaki rozmiar
IceManSpy
post 1.08.2010, 11:50:10
Post #1





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Witam

Natchnęła mnie jedna myśl i chcę posłuchać waszych opinii, porad i doświadczeń. Robimy sobie tablę w której mamy przykładowe pola imię i nazwisko. Ustalamy np takie coś:
  1. imie varchar(20),nazwisko varchar(30)

Wszystko fajnie, mamy maksymalnie określoną wielkość. Ale jeśli chcemy zabezpieczyć się przed SQL injection dodając slashe, to musimy pomyśleć, że ktoś może mieć nazwisko z ' (O'Really) które ma 32 znaki (abstrahując - ale zawsze ktoś >> jakiś niedobry hakjer, może wpisać w pole 30 znaków ' <<). To co robić w taki przypadku? Deklarować np pole nazwisko varchar(60), ale ograniczać wpis przez 2 czyli do 30 znaków? Czy MySQL rezerwuje miejsce w pamięci dopiero jak wie, ile jest znaków w polu, czy z góry rezerwuje maksymalną ilość niezależnie od ilości wpisanych znaków?


--------------------
Go to the top of the page
+Quote Post
flashdev
post 1.08.2010, 12:28:26
Post #2





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(IceManSpy @ 1.08.2010, 12:50:10 ) *
[...]
Czy MySQL rezerwuje miejsce w pamięci dopiero jak wie, ile jest znaków w polu, czy z góry rezerwuje maksymalną ilość niezależnie od ilości wpisanych znaków?


To zależy od ROW_FORMAT. Może przyjąć wartość DYNAMIC lub FIXED.


--------------------
Go to the top of the page
+Quote Post
IceManSpy
post 1.08.2010, 12:52:32
Post #3





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Cytat(flashdev @ 1.08.2010, 13:28:26 ) *
To zależy od ROW_FORMAT. Może przyjąć wartość DYNAMIC lub FIXED.


Jak i gdzie to sprawdzić? No i dalsze pytanie, jakie rozmiary ustawiać?

Ten post edytował IceManSpy 1.08.2010, 12:53:01


--------------------
Go to the top of the page
+Quote Post
flashdev
post 1.08.2010, 12:58:14
Post #4





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(IceManSpy @ 1.08.2010, 13:52:32 ) *
Jak i gdzie to sprawdzić? No i dalsze pytanie, jakie rozmiary ustawiać?


phpMyAdmin -> Operacje -> Opcje tabeli

Jak ustawiać to już zależy od konkretnego przypadku. Przy ustawieniu FIXED dostęp do danych będzie szybszy, ale przy DYNAMIC baza danych będzie zajmowała mniej miejsca na dysku.


--------------------
Go to the top of the page
+Quote Post
IceManSpy
post 1.08.2010, 14:08:44
Post #5





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


A jak z rozmiarem pola? Robić 2 razy większy niż chce czy jaki?


--------------------
Go to the top of the page
+Quote Post
Mchl
post 1.08.2010, 15:29:21
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Cytat(IceManSpy @ 1.08.2010, 12:50:10 ) *
Ale jeśli chcemy zabezpieczyć się przed SQL injection dodając slashe...


Przecież slashe nie są zapisywane w bazie. Chyba że slaszujesz podwójnie, ale to jest błąd.
Go to the top of the page
+Quote Post
IceManSpy
post 1.08.2010, 20:08:18
Post #7





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Faktycznie, nie zapisuje. W takim razie po co robić stripslashes przy odczycie?


--------------------
Go to the top of the page
+Quote Post
Mchl
post 1.08.2010, 20:21:43
Post #8





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Po nic. Stripslashes trzeba zrobić przed zapisem, jeśli mamy włączone magic_quotes

Kod
if(get_magic_quotes_gpc()) {
  $var = stripslashes($_POST['var']);
}
$var = mysql_real_escape_string($var);
Go to the top of the page
+Quote Post
IceManSpy
post 1.08.2010, 20:30:56
Post #9





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Ale jeśli mamy włączone magic_quotes, to nie musimy dbać o addslashes'y i o SQL injection?


--------------------
Go to the top of the page
+Quote Post
Mchl
post 1.08.2010, 21:04:52
Post #10





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Musimy, bo to g...niane zabezpieczenie i nie uwzględnia wielu możliwych ataków. Dlatego przez stripslashes() odkręcamy to co robi magic_quotes, a potem używamy funkcji dedykowanej do naszej bazy danych.

Poza tym w następnej wersji PHP magic quotes w ogóle już nie będzie.
http://wiki.php.net/rfc/magicquotes
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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 07:47