Jakub L.

Jakub L. Programista

Temat: Walidacja formularzy po której stronie?

Jarek Żeliński:
Jakub L.:
Jak się ma dostęp do gołych pól, zmiany robi się dowolne.

od kiedy w programowaniu obiektowym ma się dostęp do 'gołych pól" albo co to są "gołe pola"???

Od momentu jak się ma pola typu public które każdy może przeczytać i zapisać.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Walidacja formularzy po której stronie?

Tomasz Zadora:
Jarek Żeliński:
[...]
private/protected/public to ograniczanie zasięgu a nie bezpieczeństwo...

To może ja zacznę pytać na odmianę ;-)

Po co w takim razie się ten zasięg ogranicza ?

żeby poza kierowcą samochodu nikt inny nie mógł naciskać pedałów gazu i hamulca samochodu (to są metody chronione), reszta świata może tylko poprosić kierowce by jechał lub zatrzymał się na czerwonym świetle (to metody publiczne), kierowca zaś nie może palcem pociągnąć za linkę przyśpieszenia w silniku bo to metoda prywatna samochodu nie udostępniana kierowcy (ten ma swój interfejs czyli pedały w kabinie). I nigdzie nie ma tu mowy o atrybutach bo nie może być. Paradygmat obiektowy zakłada, że atrybuty są wszystkie prywatne.Jarek Żeliński edytował(a) ten post dnia 10.02.11 o godzinie 06:05
Jakub L.

Jakub L. Programista

Temat: Walidacja formularzy po której stronie?

W dziedziczeniu też?
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Walidacja formularzy po której stronie?

Jakub L.:
W dziedziczeniu też?

w dziedziczeniu co? Bo klasa pochodna (podklasa, klasa dziedzicząca) jest sama sobie klasą wiec w czym problem? W razie czego z góry pisze: jeżeli klasa odwołuje się do swojej superklasy (lub odwrotnie) to jest jeden z najcięższych błędów :)

język programowania zawsze daje większą swobodę niż "dobre praktyki" czy wręcz tu: paradygmat obiektowy. Można w javie, php5, .net'cie napisać program tak samo jak kiedyś w basicu czy pascalu ale to nie o to chodzi...

pralkę kupujemy nie po to by używać jej jak miski mimo, że można wlać wodę, wsadzić łapy i prać ...Jarek Żeliński edytował(a) ten post dnia 10.02.11 o godzinie 10:46
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Walidacja formularzy po której stronie?

strony - herezje - takie jak ta:
http://wortal.php.pl/phppl/Wortal/Artykuly/PHP/Podstaw...

moim zdaniem robią ludziom straszną krzywdę... bo troszkę jak by napisać: młotek to urządzenie służące na naparzania we wszystko co się nawinie, można nim rozwalić cokolwiek byle mocno walną. Jest to prawda ale czy ma sens takie tłumaczenie po co młotki produkują?

za taki tekst "kursu":

"Dziedziczenie to po prostu dołączanie do obiektu metod i atrybutów innych obiektów."

należało by wieszać bez sądu...Jarek Żeliński edytował(a) ten post dnia 10.02.11 o godzinie 10:56
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Walidacja formularzy po której stronie?

Jarek Żeliński:
strony - herezje - takie jak ta:
http://wortal.php.pl/phppl/Wortal/Artykuly/PHP/Podstaw...

moim zdaniem robią ludziom straszną krzywdę... bo troszkę jak by napisać: młotek to urządzenie służące na naparzania we wszystko co się nawinie, można nim rozwalić cokolwiek byle mocno walną. Jest to prawda ale czy ma sens takie tłumaczenie po co młotki produkują?

za taki tekst "kursu":

"Dziedziczenie to po prostu dołączanie do obiektu metod i atrybutów innych obiektów."

należało by wieszać bez sądu...Jarek Żeliński edytował(a) ten post dnia 10.02.11 o godzinie 10:56

Najbardziej w tym artykule podoba mi się dziedziczenie związku chemicznego po pierwiastku :P
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Walidacja formularzy po której stronie?

Wojciech Soczyński:
za taki tekst "kursu":

"Dziedziczenie to po prostu dołączanie do obiektu metod i atrybutów innych obiektów."

należało by wieszać bez sądu...

Najbardziej w tym artykule podoba mi się dziedziczenie związku chemicznego po pierwiastku :P

jak czasami czytam artykuły w prasie albo peany studentów o "darmowej wiedzy w internecie, a za książki płacą tylko frajerzy" to mi ręce opadają.... bo ta "wiedza" jest właśnie taka jak powyżej... jest gorzej, znajduję nawet takie książki na półkach, w jednej np. są diagramy klas z kluczami głównymi i obcymi i to jest tragedia...

(a numer z pierwiastkiem jest super :DDDDD)Jarek Żeliński edytował(a) ten post dnia 10.02.11 o godzinie 11:13
Tomasz Zadora

Tomasz Zadora programuję

Temat: Walidacja formularzy po której stronie?

Jarek Żeliński:
[...]
żeby poza kierowcą samochodu nikt inny nie mógł naciskać pedałów gazu i hamulca samochodu (to są metody chronione),
[...]
[/edited]

http://pl.wikipedia.org/wiki/Integralno%C5%9B%C4%87_da...

"Integralność danych, także spójność (ang. data integrity) funkcja bezpieczeństwa polegająca na tym, że dane nie zostały zmienione, dodane lub usunięte w nieautoryzowany sposób."

Swoim trywialnym przykładem z kierowcą tylko potwierdziłeś to co pisałem wcześniej. Tylko w tym przypadku integralność samochodu to stan w którym jest po prostu nie uszkodzony, kierowca nie powinien mieć prawa wsadzać śrubokrętu do silnika podczas jazdy bo to grozi brakiem integralności.

Ograniczenie zasięgu to *de facto* sprawa bezpieczeństwa, w końcu wszelkie metody albo mają wpływ na atrybuty albo jakieś informacje zwracają.

Jeżeli np. jest metoda dodaj() w obiekcie klasy A, i tenże obiekt ma atrybut "licznik ile razy dodano" to występuje *zależność* między licznikiem a ilością wywołań metody dodaj() - czyli pewna *spójność*.

Jeżeli teraz ten licznik jest publiczny to wystarczy, że inny obiekt zmieni ten licznik w taki sposób, że nie będzie zgodny z ilością wywołań metody i już mamy brak integralności - dlatego *między innymi* stosuje się ograniczenie zasięgu.

Oczywiście ja tego w PHP nie stosuje bo uważam, że w tym środowisku nie ma to sensu i inaczej tego typu problemy można rozwiązać.Tomasz Zadora edytował(a) ten post dnia 10.02.11 o godzinie 11:51
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Walidacja formularzy po której stronie?

Tomasz Zadora:
Jarek Żeliński:
[...]
żeby poza kierowcą samochodu nikt inny nie mógł naciskać pedałów gazu i hamulca samochodu (to są metody chronione),
[...]
[/edited]

http://pl.wikipedia.org/wiki/Integralno%C5%9B%C4%87_da...

"Integralność danych, także spójność (ang. data integrity) funkcja bezpieczeństwa polegająca na tym, że dane nie zostały zmienione, dodane lub usunięte w nieautoryzowany sposób."

nie zapominaj, że wiki piszą ci sami co wspomniane kursy PHP więc trzeba zachować czujność..
Swoim trywialnym przykładem z kierowcą tylko potwierdziłeś to co pisałem wcześniej. Tylko w tym przypadku integralność samochodu to stan w którym jest po prostu nie uszkodzony, kierowca nie powinien mieć prawa wsadzać śrubokrętu do silnika podczas jazdy bo to grozi brakiem integralności.

powtórzę więc bo przykład był chyba jednak za trudny: metoda prywatna "linka gazu" w samochodzie po to jest prywatna by kierowca używał tylko pedałów i nie miął dostępu do tej linki żeby przyśpieszyć.

Po drugie, jeżeli mowa o programowaniu obiektowym to atrybuty są wyłącznie prywatne więc nie ma możliwości takiej jak w systemach pascal/dbf: do danych nie masz dostępu innego niż metody danego obiektu. Poprawny program obiektowy nie wystawia żadnych danych, wyłącznie interfejsy.

po drugie jeżeli obiekt sam potrafi spaprać swoje atrybuty to w ogóle jest to zły program a nie "zła ochrona integralności danych", pojęcie integralności danych to problematyka baz relacyjnych a nie systemów obiektowych.

chyba podziękuję bo zaczynamy gonić własny ogon...
Tomasz Zadora

Tomasz Zadora programuję

Temat: Walidacja formularzy po której stronie?

Jarek Żeliński:
[...]

nie zapominaj, że wiki piszą ci sami co wspomniane kursy PHP więc trzeba zachować czujność..

Rozumiem, tylko Ty masz patent na prawidłową interpretację ;-) Odrobina arogancji nie zaszkodzi.

[...]
powtórzę więc bo przykład był chyba jednak za trudny: metoda prywatna "linka gazu" w samochodzie po to jest prywatna by kierowca używał tylko pedałów i nie miął dostępu do tej linki żeby przyśpieszyć.

Ja to doskonale rozumiem, a teraz dodatkowo potwierdzasz, że jednak chodzi o bezpieczeństwo :)
Po drugie, jeżeli mowa o programowaniu obiektowym to atrybuty są wyłącznie prywatne więc nie ma możliwości takiej jak w systemach pascal/dbf: do danych nie masz dostępu innego niż metody danego obiektu. Poprawny program obiektowy nie wystawia żadnych danych, wyłącznie interfejsy.

Jednak skutkiem użycia tych metod jest zmiana atrybutu prawda ? Zamień w moim przykładzie bezpośrednią zmianę licznika na metodę zmienLicznik() (która powinna być prwatna) wywolywaną przez dodaj() i wyjdzie na to samo.

[...]
chyba podziękuję bo zaczynamy gonić własny ogon...

Tak to dobry pomysł, zaczynasz się powtarzać a to już jest nudne.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Walidacja formularzy po której stronie?

Tomasz Zadora:
Rozumiem, tylko Ty masz patent na prawidłową interpretację ;-) Odrobina arogancji nie zaszkodzi.

nie ja to ocenię...
Tak to dobry pomysł, zaczynasz się powtarzać a to już jest nudne.

to prawda, na szczęście obu nas weryfikuje stale rynek... EOT
Paweł Spychalski

Paweł Spychalski Senior Frontend
Developer, Home24

Temat: Walidacja formularzy po której stronie?

To się może ponownie podłączę zadając zadanie z treścią:

"Mamy dwie wersje skompilowanego, działającego według założeń programu. Dwa programy różni jedna rzecz: w drugim programie wszystkie atrybuty private i protected zamieniono na public. Poza tym, nie ma innych zmian w kodzie. Który program jest bezpieczniejszy i który lepiej zapewnia integralność wprowadzanych i przetwarzanych danych?"
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Walidacja formularzy po której stronie?

Paweł Spychalski:
To się może ponownie podłączę zadając zadanie z treścią:

"Mamy dwie wersje skompilowanego, działającego według założeń programu. Dwa programy różni jedna rzecz: w drugim programie wszystkie atrybuty private i protected zamieniono na public. Poza tym, nie ma innych zmian w kodzie. Który program jest bezpieczniejszy i który lepiej zapewnia integralność wprowadzanych i przetwarzanych danych?"
Mam dwa ciasta upieczone z różnych składników, smakują tak samo, które jest lepsze ?

Kod jest dla ludzi, bity dla procesora.Wojciech Soczyński edytował(a) ten post dnia 10.02.11 o godzinie 15:06
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Walidacja formularzy po której stronie?

Paweł Spychalski:
To się może ponownie podłączę zadając zadanie z treścią:

"Mamy dwie wersje skompilowanego, działającego według założeń programu. Dwa programy różni jedna rzecz: w drugim programie wszystkie atrybuty private i protected zamieniono na public. Poza tym, nie ma innych zmian w kodzie. Który program jest bezpieczniejszy i który lepiej zapewnia integralność wprowadzanych i przetwarzanych danych?"

a co się stanie jak wszyscy mieszkańcy w bloku zostawią otwarte drzwi? nic do czasu gdy nie pojawi się choć jeden złodziej łamiący zasady...

(tu mnie proszę poprawić bo mogłem coś uprościć), jeżeli pisze się proste rzeczy i z palca programuje każdy kawałek to być może różnicy nie będzie, ale jeżeli piszemy coś dużego z pluginami różnych autorów, wzorcami public-subscibe, observer i podobnymi, na dodatek pracującego w sieci i obsługującego webserwisy...... to może być rzeźnia... i nie chodzi tu o jakieś dane i ich integralność bo to pojęcia rodem z RDMBS, chodzi o nieautoryzowane wykonanie metod (kodu). Klasy, komponenty itp. powinny udostępniać tylko te metody - interfejs, które są dozwolone z zewnątrz.

ale jak to mówią obowiązku nie ma :) Jarek Żeliński edytował(a) ten post dnia 10.02.11 o godzinie 15:23
Paweł Spychalski

Paweł Spychalski Senior Frontend
Developer, Home24

Temat: Walidacja formularzy po której stronie?

Wojciech Soczyński:
Paweł Spychalski:
To się może ponownie podłączę zadając zadanie z treścią:

"Mamy dwie wersje skompilowanego, działającego według założeń programu. Dwa programy różni jedna rzecz: w drugim programie wszystkie atrybuty private i protected zamieniono na public. Poza tym, nie ma innych zmian w kodzie. Który program jest bezpieczniejszy i który lepiej zapewnia integralność wprowadzanych i przetwarzanych danych?"
Mam dwa ciasta upieczone z różnych składników, smakują tak samo, które jest lepsze ?

Skoro żadne z nich nie jest lepsze, więc w jaki magiczny sposób hermetyzacja ma podnieść bezpieczeństwo programu? Ponieważ nie jest lepsze gorsze, więc wniosek jest prosty: nie podnosi.
I właśnie to chciałem udowodnić.

Hermetyzacja poprawia jakość kodu, może zmniejszyć ryzyko popełnienia błędu przez programistę, upraszcza proces programowania (zwykle) i (powinna) upraszcza utrzymanie kodu, ale nie ma bezpośredniego wpływu na takie aspekty jak bezpieczeństwo/zabezpieczenia czy integralność danych gotowego programu.
Te rzeczy można zapewnić i bez hermetyzacji.
Paweł Spychalski

Paweł Spychalski Senior Frontend
Developer, Home24

Temat: Walidacja formularzy po której stronie?

Jarek Żeliński:

a co się stanie jak wszyscy mieszkańcy w bloku zostawią otwarte drzwi? nic do czasu gdy nie pojawi się choć jeden złodziej łamiący zasady...

No tak, ale zamykania drzwi w mieszkaniu nie można porównywać do stosowania hermetyzacji z punktu widzenia gotowego programu.
Z punktu widzenia programu, zamknięciem drzwi będzie walidacja, escapowanie, uniemożliwieniem wstrzyknięcia kodu, czy autoryzacja użytkowników (nie tylko użytkowników ludzi, ale także innych systemów).
Na poziomie skompilowanego (czy też wgranego na serwer skryptu PHP) takie rzeczy jak hermetyzacja nie mają najmniejszego znaczenie. Wszystko i tak staje się ciągiem rozkazów i adresów.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Walidacja formularzy po której stronie?

Paweł Spychalski:
Jarek Żeliński:

a co się stanie jak wszyscy mieszkańcy w bloku zostawią otwarte drzwi? nic do czasu gdy nie pojawi się choć jeden złodziej łamiący zasady...

No tak, ale zamykania drzwi w mieszkaniu nie można porównywać do stosowania hermetyzacji z punktu widzenia gotowego programu.

hermetyzacja to "niepokazywanie" reszcie świata "pewnych rzeczy" albo innymi słowy nieudostępnianie polecenia (wywołania metody). Np. ja mam między innymi metodę prywatna "podrap się w tyłek" i publiczną "przywitaj się", chyba nie muszę tłumaczyć różnicy... nadal nie ma tu mowy o danych, w przypadku danych
wszytko co mam w głowie (atrybuty) jest prywatne, jedynym sposobem by dowiedzieć się ile mam lat jest zapytać mnie o to (metoda "podaj wiek"). Gdybym chciał by ten (i inne) atrybut był atrybutem publicznym wytatuował bym sobie datę urodzenia na czole ale raczej nie ma to sensu... i nikt rozsądny tego nie robi (choć jest to możliwe).

Z punktu widzenia programu, zamknięciem drzwi będzie walidacja,

walidacja (lubię to polskie słowo) to weryfikacja poprawności np. wartości atrybutów a nie to czy użyta metoda do ich zmiany była publiczna czy prywatna, numer telefonu ma mieć 7 cyfr i nie ma to nic wspólnego z tym czy jest to atrybut publiczny, prywatny czy chroniony (chroniony oznacza widoczność w ramach pakietu)
Na poziomie skompilowanego (czy też wgranego na serwer skryptu PHP) takie rzeczy jak hermetyzacja nie mają najmniejszego znaczenie. Wszystko i tak staje się ciągiem rozkazów i adresów.

ma znaczenie bo sens pozostaje....Jarek Żeliński edytował(a) ten post dnia 10.02.11 o godzinie 17:22
Jakub L.

Jakub L. Programista

Temat: Walidacja formularzy po której stronie?

Jarek Żeliński:
Jakub L.:
W dziedziczeniu też?

w dziedziczeniu co? Bo klasa pochodna (podklasa, klasa

W dziedziczeniu pola klasy z której się dziedziczy też mają być jej prywatne?
dziedzicząca) jest sama sobie klasą wiec w czym problem? W razie czego z góry pisze: jeżeli klasa odwołuje się do swojej superklasy (lub odwrotnie) to jest jeden z najcięższych błędów :)

To po co w ogóle dziedziczenie?
Jakub L.

Jakub L. Programista

Temat: Walidacja formularzy po której stronie?

Jarek Żeliński:

powtórzę więc bo przykład był chyba jednak za trudny: metoda prywatna "linka gazu" w samochodzie po to jest prywatna by kierowca używał tylko pedałów i nie miął dostępu do tej linki żeby przyśpieszyć.

A jakbym chciał sobie zrobić samochód w którym można przyśpieszać ciągnąc linkę gazu, to co?
Jak głęboko muszę przeryć projekt, czy od razu pisać od zera bo autor nie miał życzenia?
po drugie jeżeli obiekt sam potrafi spaprać swoje atrybuty to w ogóle jest to zły program a nie "zła ochrona integralności danych", pojęcie integralności danych to problematyka baz relacyjnych a nie systemów obiektowych.

Zły program właśnie z powodu złej integralności danych, jeżeli akurat ten problem jest na pierwszym planie.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Walidacja formularzy po której stronie?

Paweł Spychalski:
Wojciech Soczyński:
Paweł Spychalski:
To się może ponownie podłączę zadając zadanie z treścią:

"Mamy dwie wersje skompilowanego, działającego według założeń programu. Dwa programy różni jedna rzecz: w drugim programie wszystkie atrybuty private i protected zamieniono na public. Poza tym, nie ma innych zmian w kodzie. Który program jest bezpieczniejszy i który lepiej zapewnia integralność wprowadzanych i przetwarzanych danych?"
Mam dwa ciasta upieczone z różnych składników, smakują tak samo, które jest lepsze ?

Skoro żadne z nich nie jest lepsze, więc w jaki magiczny sposób hermetyzacja ma podnieść bezpieczeństwo programu? Ponieważ nie jest lepsze gorsze, więc wniosek jest prosty: nie podnosi.
I właśnie to chciałem udowodnić.

Hermetyzacja poprawia jakość kodu, może zmniejszyć ryzyko popełnienia błędu przez programistę, upraszcza proces programowania (zwykle) i (powinna) upraszcza utrzymanie kodu, ale nie ma bezpośredniego wpływu na takie aspekty jak bezpieczeństwo/zabezpieczenia czy integralność danych gotowego programu.
Te rzeczy można zapewnić i bez hermetyzacji.
Jeżeli byś zrozumiał to co napisałem o kodzie dla ludzi i dla maszyn to byś wiedział po co jest hermetyzacja. Jest ona po to, aby umożliwić abstrakcje. Po to by obiekt udostępniał swój interfejs a ukrywał implementację. To jest sposób paradygmatu obiektowego na elastyczność. Możesz wymieniać bebechy a działanie i tak będzie takie samo.

I jeszcze raz powtórzę - rzeczy typu hermetyzacja, abstrakcja etc są dla ludzi, by ułatwić im pisanie zrozumiałych dla nich programów. Komputera interesuje tylko postać binarna.

Następna dyskusja:

Niechciane wpisy do formularzy




Wyślij zaproszenie do