Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pola w bazie, jaki rozmiar
IceManSpy
post
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
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
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
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
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
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
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
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
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
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 12:04