Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Autorski CMS
Forum PHP.pl > Inne > Oceny
Omenomn
Stworzyłem własny CMS, na frameworkach codeigniter i bootstrap.
link:
http://s1060364-14898.home-whs.pl/modules_1/
Admin ze wszystkimi uprawnieniami
email: jan@kowalski
hasło: abcd

Użytkownik z uprawnieniami do zwykłego zarządzania
email: beata@beata.pl
hasło: abcd

Co sądzicie?
rad11
Na admina nie mozna sie zalogowac.
Albo robisz strone po polsku albo po angielsku.(zmien jezyk w CI na PL)
Uzywasz bootstrap ale strona nie jest responsywna(np panel logowania, reszta zakladek rowniez) przyjrzyj sie temu.
Rozszerz wyswig.
Brak podgladu zdjec, galerii(uzyj js`a do tworzenia galerii istnieje sporo gotowych rozwiazan).
Malo incyuicyjne wszystko jest(zmiana layoutu napewno pomoze).
Zmien layout to co Ty masz to jest porazka(uzyj jakis gotowych).
Kolejnosc kategorii po co tam przycisk zapisz?Przeciez mozna uzyc ajax`x i zapisywac przy opuszczaniu(zainteresuj sie ajaxem).
Paginacja ze strzalkami brzydkie to. Bootstrap ma ladniejsze paginacje.
Dodajesz wpisy a gdzie mozna je zobaczyc?(a pozatym zrob jakies grid view zdjec jak i wpisow listowanie jest juz staromodne wink.gif )
Dodaj cos wiecej do swojego projektu jakies diagramy aktywnosci, wpisow wszystkiego co sie da.
Po wpisaniu w adresie np: http://s1060364-14898.home-whs.pl/modules_1/admin/image sa krzaki.(pomoze pewnie zmiana na UTF-8).


Ogolnie duzo pracy przed Toba. Strasznie amatorskie to.
KsaR
http://s1060364-14898.home-whs.pl/modules_...ontents/edit/9:
Cytat
A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/20/113306/webspace/httpdocs/modules_1/application/controllers/admin/contents.php:361)

Filename: libraries/Session.php

Line Number: 689

http://s1060364-14898.home-whs.pl/modules_...tents/edit/10/1
Cytat
A PHP Error was encountered

Severity: Warning

Message: Missing argument 2 for lists_of_category_mod(), called in /var/www/vhosts/20/113306/webspace/httpdocs/modules_1/application/views/_admin/contents/single_cat.php on line 6 and defined

Filename: helpers/admin_helper.php

Line Number: 114

A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/20/113306/webspace/httpdocs/modules_1/application/controllers/admin/contents.php:361)

Filename: core/Common.php

Line Number: 437

A Database Error Occurred
Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY category_reg_mod.id' at line 1

SELECT category.title, category.id FROM category LEFT JOIN category_reg_mod ON category.id=category_reg_mod.cat_id where reg_id = 1 and mod_id = ORDER BY category_reg_mod.id

Filename: /var/www/vhosts/20/113306/webspace/httpdocs/modules_1/helpers/admin_helper.php

Line Number: 119

Wszedzie blad jak kliknie sie "zapisz"

Tlo (to "pomaranczowe"?) dziwnie wyglada.
rad11
Ksar to nic spojrz tutaj

http://forum.php.pl/index.php?showtopic=24...p;#entry1160590

Kolego naprawdę na Twoim miejscu jeszcze bym się powsciągnął z takimi ofertami bo Ja osobiście niechciałbym aby ktoś takie strony mi robił smile.gif
KsaR
Cytat(rad11 @ 5.06.2015, 19:05:19 ) *

Ech tongue.gif.
---
Wracając do tematu,
Połowa strony źle działa, mogę się mylić ale chyba są możliwe ataki XSS w kilku miejscach.
(Uzywasz strip_tags zamiast htmlspecialchars($str,ENT_QUOTES,'UTF-8'); )
Itp, popraw bledy zeby bylo co testowac;
Omenomn
Ksar dziwne, że błąd wywaliło, wcześniej tego nie było, przyjrzę się temu, błąd przy zapisie, bo się array wyświetla, nie było tego wcześniej.


Cytat
Na admina nie mozna sie zalogowac.
Albo robisz strone po polsku albo po angielsku.(zmien jezyk w CI na PL)
Uzywasz bootstrap ale strona nie jest responsywna(np panel logowania, reszta zakladek rowniez) przyjrzyj sie temu.
Rozszerz wyswig.
Brak podgladu zdjec, galerii(uzyj js`a do tworzenia galerii istnieje sporo gotowych rozwiazan).
Malo incyuicyjne wszystko jest(zmiana layoutu napewno pomoze).
Zmien layout to co Ty masz to jest porazka(uzyj jakis gotowych).
Kolejnosc kategorii po co tam przycisk zapisz?Przeciez mozna uzyc ajax`x i zapisywac przy opuszczaniu(zainteresuj sie ajaxem).
Paginacja ze strzalkami brzydkie to. Bootstrap ma ladniejsze paginacje.
Dodajesz wpisy a gdzie mozna je zobaczyc?(a pozatym zrob jakies grid view zdjec jak i wpisow listowanie jest juz staromodne wink.gif )
Dodaj cos wiecej do swojego projektu jakies diagramy aktywnosci, wpisow wszystkiego co sie da.
Po wpisaniu w adresie np: http://s1060364-14898.home-whs.pl/modules_1/admin/image sa krzaki.(pomoze pewnie zmiana na UTF-8).


Rad11, ludzie, którym robiłem byli zadowoleni, więc nie ma aż takiej tragedii jak twierdzisz, po za tym nie robiłem ich za 5 tys. cena wzrasta wraz z doświadczeniem i możliwościami. Kolejność kategorii i przycisk zapisz wykorzystuje ajax! Przycisk zapisz jest po to, żeby zatwierdzić zmiany smile.gif Paginację poprawię, chociaż to kwestia gustu. pomyślę nad tym grid view i diagramami aktywności, trochę nie widzę potrzeby tego, ale przemyślę sprawę.
Wpisy ogląda się na stronie bezpośrednio według mojego mnienia, nie ma potrzeby czytania ich w cmsie i tak samo ze zdjęciami.
Dziwnie jest atakować swoją stronę tongue.gif, bo zmiany można wprowadzać dopiero po zalogowaniu, ale rzeczywiście warto dodać taką walidację, dzięki za odpowiedzi.
Ładnie pojechaliście. Wezmę wszystko pod uwagę.
Według mnie wszystko jest bardzo intuicyjne, ma ktoś pomysł konkretny jak poprawić intuicyjność? Jest proste menu. Wszystko można ogarnąć w 5 minut.
gitbejbe
Nie wiem jak inni ale ja gdy widze strone wlasnie tego pokroju- czyli slabo przygotowana wizualnie, to jeztem pewien na 90% ze kod i logika wyglada tak samo. Jesli ktos jest dobry i powaznie podchodzi do tematu, to nie robi niczego na odpierdol - a tutaj to tak wyglada. Nie wyobrazalbym sobie opublikowac swojego projektu w takim wydaniu... taka postawa wydaje mi sie tym bardziej dziwna z uwagi na to, ze nie ma teraz problemu kupic - za grosze, na prawde fajne i nowoczesne szablony. pamietaj ze pierwsze co sprawia ze uzytkownik chce pozostac na twojej stronie, to przede wszystkim jej wyglad.

Sorki za błedy, pisze z telefonu.
Spawnm
Brak HttpOnly dla sesji, brak tokenów czy kasowania z wykorzystaniem post zamiast get:
Cytat

<img src="http://s1060364-14898.home-whs.pl/modules_1/admin/contents/delete/9/1"> i tracisz dane.
Brak ochrony przed brute force.

Strona błędu nie ma<html><body> przez co wali krzakami.
Błąd
Pyton_000
@Spawnm to że Get zamiast post to nic nie zmienia.
Może być GET o ile wew. jest wprowadzone zabezpieczenie przed takimi kwiatkami jak mówisz czyli musisz być Autoryzowany oraz być właścicielem obiektu. Jeśli to spełnisz to w 90% przypadków nic nie zdziałasz takimi linkami gdzieś tam.
Spawnm
@Pyton_000 takimi linkami można wyczyścić wszystkie rekordy należące do danej osoby, lub wszystkie jeśli tą osobą jest admin.
Link jest odpalany po stronie osoby zalogowanej wiec przechodzi wszelkie autoryzacje.
GET można rozważać jeśli są jakieś tokeny, sprawdzanie czy istnieje referer itd. Tutaj nie było nic
Omenomn
Cytat
Nie wiem jak inni ale ja gdy widze strone wlasnie tego pokroju- czyli slabo przygotowana wizualnie, to jeztem pewien na 90% ze kod i logika wyglada tak samo. Jesli ktos jest dobry i powaznie podchodzi do tematu, to nie robi niczego na odpierdol - a tutaj to tak wyglada. Nie wyobrazalbym sobie opublikowac swojego projektu w takim wydaniu... taka postawa wydaje mi sie tym bardziej dziwna z uwagi na to, ze nie ma teraz problemu kupic - za grosze, na prawde fajne i nowoczesne szablony. pamietaj ze pierwsze co sprawia ze uzytkownik chce pozostac na twojej stronie, to przede wszystkim jej wyglad.

Sorki za błedy, pisze z telefonu.


to może być tylko Twoje przeświadczenie, póki co nie skupiałem się aż tak bardzo na stronie wizualnej, wszystko jest z bootstrapa, narazie chciałbym, żeby wszystkie funkcjonalności działały w odpowiedni sposób.

Cytat
<img src="http://s1060364-14898.home-whs.pl/modules_1/admin/contents/delete/9/1"> i tracisz dane.


Nie rozumiem, o co chcodzi? Po co wklejać taki link w img src. Nie można stosować get do usuwania? Mam stosować tokeny, czy post?

Cytat
Strona błędu nie ma<html><body> przez co wali krzakami.
Błąd


Poprawię to.

Cieszy mnie taki feedback, nowe rzeczy do ogarnięcia.
KsaR
Cytat(Pyton_000 @ 6.06.2015, 13:03:21 ) *
@Spawnm to że Get zamiast post to nic nie zmienia.
Może być GET o ile wew. jest wprowadzone zabezpieczenie przed takimi kwiatkami jak mówisz czyli musisz być Autoryzowany oraz być właścicielem obiektu. Jeśli to spełnisz to w 90% przypadków nic nie zdziałasz takimi linkami gdzieś tam.

Niby nic jednak zacytuje slowa z ksiazki
Cytat
Sposob uzycia GET w tym formularzu stanowi pogwalcenie ustepu 9.1.1 dokumentu RFC 2616, bedacego specyfikacja HTTP, w ktorym napisano „...zgodnie z ustaloną konwencją GET i HEAD NIE POWINNY umożliwiać wykonywania jakichkolwiek czynności innych niż pobieranie danych.
Powinno być uważane za bezpieczne
”. Innymi słowy:
Metoda GET nie powinna umozliwiac tworzenia, modyfikowania ani usuwania danych.

tongue.gif
Pyton_000
To że nie powinny nie znaczy że nie mogą tongue.gif
Xelah
@Pyton_000 Myślałęm, że tutaj się powinno pomagać tym, którzy sobie jeszcze nie radzą w temacie za dobrze a nie sugerować półśrodki czy workaround. GET nie jest do modyfikacji danych i koniec kropka. Starajmy się pokazywać dobre rozwiązania. Wiele rzeczy można zrobić na wiele sposobów, ale to wcale nie znaczy że każdy sposób jest dobry. Tutaj GET jest najgorszym z możliwych rozwiązań i usprawiedliwianie go w stylu "bo można" nie umniejsza bezsensowności tego rozwiązania :)
com
Xelah Idac takim tokiem rozumowania to POST tak samo nie powinien umożliwiać modyfikacji bo czym to się różni prócz tego gdzie jest przykazywany, no niczym. (A sam ten zapis jak przeczytasz go cały i w oryginale sprowadza się tylko do tego, że jak sie to zastosuje to w najgorszym wypadku można być pociągniętym do odpowiedzialności za złe jego zastosowanie i wręcz piesze że inne typy np POST itd tak samo sa niebezpieczne, tylko użytkownik nie musi być tego świadomy) Ten przykład zaproponowany przez Spawnm jest książkowym przykładem ataków na webaplikacje i niestety autoryzowanie o którym wspomina Pyton_000, często da się jednak ominąć, to zależy od tego w jaki sposób zbudowany jest nasza serwis.

Xelah tak swoją drogą to chętnie zobaczę przykład gdzie ludzie tak się do tego stosują, przeważnie usuń, edytuj itp dostają id getem wink.gif
Spawnm
@com rzeczywiście id często lecą getem, jednak z reguł lecą wtedy też tokeny czy jakieś dodatkowe zabezpieczenia wink.gif
kayman
Cytat
Metoda GET nie powinna umożliwiać tworzenia, modyfikowania ani usuwania danych.


imo jest od tego kilka bardzo poważnych wyjątków smile.gif

poza tym nie widzę nic złego w usuwaniu danych metodą GET
KsaR
Cytat(kayman @ 7.06.2015, 17:14:21 ) *
imo jest od tego kilka bardzo poważnych wyjątków smile.gif

poza tym nie widzę nic złego w usuwaniu danych metodą GET


Przyznam się, tak...
Jak robiłem czat na strone to GET-em, Dla moderatorów kasowanie postów wpisów.
Ale miałem zabezpieczenie przeciw podszyciu się rangą itp.

Jednak wtedy to robiłem docelowo żeby potestować czy wszystko działa itp.
I nie przemyslalem wtedy tego, ale teraz mysle ze lepiej POST-em mimo niskiej roznicy.
Jak wiadomo utrudni to napewno i tak zabawę usera(wiekszosci).
Edytowac link to jedno, wyslac dane post-em drugie.

Hm i poza tym ladniej link wyglada biggrin.gif
com
Spawnm owszem ale to u tych co maja jakieś pojecie o XSS, SQL Injection itd, widziałem masę rozwiązań gdzie leci samo id, ba nawet w książkach tak uczą, pomijając fakt, że sam kiedyś zdarzyło mi się zrobić takie kwiatki kiedy zaczynałem ~8 lat temu.

kayman GET jest teoretycznie łatwiej spreparować, ale jeśli chodzi o faktyczne bezpieczeństwo to nie ma to znaczenia. bo oba idą plain textem w żądaniu. Dopiero SSL można uznać za teoretycznie bezpieczny, do czasu kiedy nie znajdą kolejnego wyłomu w algorytnie biggrin.gif

Cytat
ladniej link wyglada
co to znaczy wdg Ciebie?
KsaR
Cytat(com @ 7.06.2015, 17:28:30 ) *
co to znaczy wdg Ciebie?

No że są schowane (niepotrzebne) rzeczy ktore domyslnie by byly w url-u.

Np zamiast

/action/delete/123

Bylo by samo
/action/delete
kayman
Cytat(com @ 7.06.2015, 17:26:21 ) *
ale jeśli chodzi o faktyczne bezpieczeństwo to nie ma to znaczenia


i to jest EOT na temat GET/POST

jak nie zabezpieczasz/walidujesz po stronie serwera to zawsze będzie dziurawo

oczywiście polecam "restową filozofię" ale jak pisałem jest kilka wyjątków smile.gif
com
pominę fakt, że parę lat temu widziałem przykłady na internetach gdzie ktoś odbierał zamiast z superglobalnej GET i POST, to REQUEST, to tam już nie ważne było czym się wysłało i pole do popisu było ogromne.

Ksar tak ale jaką to robi różnice, czy w przeglądarce w pasku adresu, który jest dla usera, czy w nagłówku to prześlesz, źródło strony zawsze można edytować, albo wysłać kod ajaxa który nam takiego posta wyśle jak odpowiednio danych nie przefiltrujemy.
KsaR
Cytat(com @ 7.06.2015, 17:39:19 ) *
Ksar tak ale jaką to robi różnice, czy w przeglądarce w pasku adresu, który jest dla usera, czy w nagłówku to prześlesz, źródło strony zawsze można edytować, albo wysłać kod ajaxa który nam takiego posta wyśle jak odpowiednio danych nie przefiltrujemy.

Ja juz swoje zdanie wyrazilem na ten temat tongue.gif.
Dla mnie --i takie jest moje zdanie-- fajniej wyglada gdy zbedne w urlu dane sa schowane.

Znam portal spolecznosciowy (na ktorym srednio jest zalogowanych 50 osob naraz, więc nie za tyci).
I.... Logowanie: HTTP. Formularz: GET.

Co do bezpieczenstwa o ktorym juz bylo, wyzej.
Roznicy nie ma prawie miedzy post a get,
Ale jesli mozna powstrzymac spore grono uzytkownikow to czemu by tego nie zrobic?

Poza tym post'em cos mi sie zdaje ze nawet XSS mozna uniknac w wielu przypadkach.
XSS typu wpisany przez url.

Itp, na temat tego by mozna nie ksiazke a biblioteke zlozyc chyba.
Więc tyle ode mnie na temat post vs get.
tongue.gif
com
nie ma wcale różnic, różnica jest tylko w formie zapisu w nagłówku, jedno trafia tak jak url czyli adres.pl/?query=wartosc, a drugie ląduje jako parametry w zmiennej na adres.pl, parametry wglądają 1 do jeden tak samo, tylko trafiaja na serwer jako parametry nagłówka. Przykład:
http://brugbart.com/http-post-request-php

xss przeważnie robi właśnie przez form, by zachować jakiś kod na serwerze(Persistent XSS), a nie robić go po stronie przeglądarki(DOM-Based XSS), choć można smile.gif
Omenomn
1. Tokeny zrobione
2. Wymagane skomplikowane hasło - ochrona przed brute force
3. Poprawione krzaki.
4. httpOnly
5. Wizualnie nic nie zmieniałem jak na razie, są ważniejsze sprawy.
6. Błędy przy zapisie i kategoriach w module "testowy" poprawione.
7. xss sprawdza wszystkie pola formularza jakie są.

Dwa konta:
email: jan@kowalski.pl
hasło: bbbbbB11

email: beata@beata.pl
hasło: bbbbbB11

http://s1060364-14898.home-whs.pl/modules_1/

Proszę o dalsze wskazówki
Spawnm
Cytat
ochrona przed brute force

Nadal jest podatność, mogę dowolną ilość razy próbować hasło.
Kolejna sprawa że pole password w logowaniu ma podatność na DoS.
Html z linkami zamiast imienia ?

Cytat
Error Number: 1054

Unknown column 'Array' in 'field list'

INSERT INTO `fields` (`name`, `slug`, `type`, `module_id`, `module_slug`) VALUES (Array, 'fdhfdah', 'text', '9', 'wpisy')

Filename: /var/www/vhosts/20/113306/webspace/httpdocs/modules_1/core/MY_Model.php

Line Number: 86



Btw. CSRF != XSS wink.gif


Omenomn
to nie wiem jak wzmocnić ochronę przed brute force. Mam ograniczyć w czasie możliwość logowania na jedno konto?
Nie wiem o co chodzi z tą podatnością na DoS, muszę o tym poczytać.

Cytat
Html z linkami zamiast imienia?


nie rozumiem, o co chodzi?

Cytat
Btw. CSRF != XSS wink.gif


Codeigniter ma wbudowaną walidację xss pól formularza, więc chodzi chyba o xss.
To jest ochrona, żeby nikt nie mógł zrobić niechcianych rzeczy z bazą, poprzez wprowadzenie komend do pola input, albo textarea.

Cytat
Cytat
Error Number: 1054

Unknown column 'Array' in 'field list'

INSERT INTO `fields` (`name`, `slug`, `type`, `module_id`, `module_slug`) VALUES (Array, 'fdhfdah', 'text', '9', 'wpisy')

Filename: /var/www/vhosts/20/113306/webspace/httpdocs/modules_1/core/MY_Model.php

Line Number: 86


gdzie ten błąd?
Spawnm
Obrona przed brute force - np 3 nieudane logowania i wyskakuje captcha + odpowiedni log ze była taka sytuacja.
Podatność na DoS wynika z faktu że pozwalasz na wpuszczenie dowolnie długiego ciągu do funkcji haszującej która powoduje dość spore obciążenie.

Cytat
Codeigniter ma wbudowaną walidację xss pól formularza, więc chodzi chyba o xss

Chodziło mi o fakt że CSRF nie potrzebuje xss do działania, nawiązałem to przykładu z <img>

Błąd wywołałem przesyłając tablicę zamiast dowolnego pola w formularzu
Xelah
@com
Ależ ja nigdzie ni wspomniałem nawet o bezpieczeństwie. I masz w pełni rację. Żadna metoda nie gwarantuje bezpieczeństwa.
Za to stosowanie metod zgonie z ich przeznaczeniem poprawia czytelność aplikacji i ułatwia zrozumienie tego, co się dzieje.

Bo idąc Twoim tokiem rozumowania można przyjąć, że skoro status code jest też tylko ciągiem znaków to można zwracać zawsze, powiedzmy, 404 przy usuwaniu resource. I traktować to tak, jak by wszystko było ok. No można. Technicznie się da. Tylko co przez to się osiągnie?

Ja wiem, że 99% się do tego nie stosuje. Tak jak nie stosują private/protected tylko lecą wszystko na public, bo "się da i działa". Przykładów można mnożyć w nieskończoność. Ile razy widziałem API JSON, które w przypadku błędnego requestu zwraca 200 zamiast 400 i treść błędu w plain/text? Albo internal server error z kodem 200?
Przykładów złego kodu jest znacznie więcej niż dobrego, ale to nie znaczy, że należy ot tak tolerować i usprawiedliwiać takie rzeczy. Fakt, że ktoś inny też tak robie nie jest dla mnie żadnym argumentem.

@kayman
A jakie to poważne wyjątki?
Omenomn
Cytat
Błąd wywołałem przesyłając tablicę zamiast dowolnego pola w formularzu


Spawnm jak tablicę przesłałeś zamiast dowolnego pola? Nie rozumiem.
Spawnm
Wysłałem pole foo nie jako string ale jako tablice, czyli np w kodzie zmieniłem name="foo" na name="foo[]"
Omenomn
Cytat
Wysłałem pole foo nie jako string ale jako tablice, czyli np w kodzie zmieniłem name="foo" na name="foo[]"


no już kumam i nie bardzo wiem co z tym fantem zrobić?
com
Xelah to zupełnie dwie odmienne rzeczy, ale biorąc za przykład REST masz przykładowo:
POST http://www.example.com/customers/12345/orders
GET http://www.example.com/customers/12345/orders

Rożnicy nie ma.
Ja nie przeczę, że tak się powinno robić czy też nie, ale jeśli argumentem miała by być kwestia bezpieczeństwa co sugerował tamten przytoczony fragment to jest to nie prawdą, bo nawet jak założyć odczyt to modyfikując url bezpieczny on wcale nie musi być i branie za wzór opisu ze specyfikacji z lat 90 to trochę nie odzwierciedla stanu na te czasy. Ale pewnie, że idea CRUD jest jak najbardziej wskazana czyli (POST - Create, GET - Read, PUT - Update, DELETE - Delete)


@up najprościej spr typ smile.gif
markonix
Cytat(Spawnm @ 7.06.2015, 22:09:04 ) *
Wysłałem pole foo nie jako string ale jako tablice, czyli np w kodzie zmieniłem name="foo" na name="foo[]"

Szczerze to nie znałem tego sposobu, a dość ładnie wywołuje błędy w SQL.

Bo tak naprawdę jeżeli sprawdzamy tylko czy pole nie jest puste i robimy to za pomocą empty to można się ładnie przejechać.
Omenomn
Cytat
Cytat
Wysłałem pole foo nie jako string ale jako tablice, czyli np w kodzie zmieniłem name="foo" na name="foo[]"

no już kumam i nie bardzo wiem co z tym fantem zrobić?


Sprawdzać dane posta i usuwać te, które przesyłają tablicę?
Spawnm
@Omenomn ty tak na serio?

Wystarczy wprowadzić poprawną walidację danych.
Oczekujesz stringa? Sprawdź czy dostarczona wartość jest stringiem w przedziale 3-30 znaków itd.
Jak nie, to zwracasz informację że formularz źle wypełniony.
Turson
Error occurred: 403 - forbidden
sad.gif
Omenomn
Cytat
@Omenomn ty tak na serio?

Wystarczy wprowadzić poprawną walidację danych.
Oczekujesz stringa? Sprawdź czy dostarczona wartość jest stringiem w przedziale 3-30 znaków itd.
Jak nie, to zwracasz informację że formularz źle wypełniony.


no fakt, wystarczy walidacja


Cytat
Error occurred: 403 - forbidden
sad.gif


gdzie ten bład?
markonix
Cytat(Spawnm @ 8.06.2015, 00:28:13 ) *
Wystarczy wprowadzić poprawną walidację danych.
Oczekujesz stringa? Sprawdź czy dostarczona wartość jest stringiem

No właśnie, a człowiek ma pewność, że wszystko co leci z formularza to stringi (bo nie ma jak wysłać INT, BOOL itp). No a jednak - są jeszcze tablice smile.gif
Bez bicia muszę przyznać, że nigdy nie sprawdziłem czy wartość jest stringiem, w drugą stronę, gdy oczekiwałem tablicy już to sprawdzałem (choć też czasem pewnie tylko za pomocą empty, które na tablicach działa zgodnie z oczekiwaniami).
Pyton_000
Zawsze można rzutować zmienne np. (string) czy (int) a potem !empty()
Xelah
Cytat(com @ 7.06.2015, 23:37:05 ) *
Xelah to zupełnie dwie odmienne rzeczy, ale biorąc za przykład REST masz przykładowo:
POST http://www.example.com/customers/12345/orders
GET http://www.example.com/customers/12345/orders

Rożnicy nie ma.

Tak samo jak pomiędzy:
POST http://www.example.com/customers/12345/orders
GET http://www.example.com/customers/12345/orders
PUT http://www.example.com/customers/12345/orders
DELETE http://www.example.com/customers/12345/orders
OPTIONS http://www.example.com/customers/12345/orders
PATCH http://www.example.com/customers/12345/orders

Cytat(com @ 7.06.2015, 23:37:05 ) *
Ja nie przeczę, że tak się powinno robić czy też nie, ale jeśli argumentem miała by być kwestia bezpieczeństwa co sugerował tamten przytoczony fragment to jest to nie prawdą, bo nawet jak założyć odczyt to modyfikując url bezpieczny on wcale nie musi być i branie za wzór opisu ze specyfikacji z lat 90 to trochę nie odzwierciedla stanu na te czasy. Ale pewnie, że idea CRUD jest jak najbardziej wskazana czyli (POST - Create, GET - Read, PUT - Update, DELETE - Delete)


Ja chcę tylko powiedzieć, że użycie tej czy innej metody powinno mieć pewne przewidywalne skutki. I nie mówię tu tylko o API w sensie REST czy JSON-RPC ale o requestach HTTP w ogóle. RFC moim zdaniem odnosi się tylko do tego, a nie do bezpieczeństwa w sensie "kto i na jakich zasadach ma dostęp do zasobu". Chodzi o przewidywalność. Bo jak robię OPTIONS to nie spodziewam się w odpowiedzi usuniętego posta... Prosta logika :)
Spawnm
Cytat(markonix @ 8.06.2015, 11:47:08 ) *
No właśnie, a człowiek ma pewność, że wszystko co leci z formularza to stringi (bo nie ma jak wysłać INT, BOOL itp). No a jednak - są jeszcze tablice smile.gif
Bez bicia muszę przyznać, że nigdy nie sprawdziłem czy wartość jest stringiem, w drugą stronę, gdy oczekiwałem tablicy już to sprawdzałem (choć też czasem pewnie tylko za pomocą empty, które na tablicach działa zgodnie z oczekiwaniami).

Może sprawdzałeś ale o tym nie wiedziałeś? Nie korzystałeś nigdy z frameworkowych klas walidacji? Te powinny zapewniać taką walidację wink.gif
Omenomn
Poprawiłem wszystkie pola o walidację stringa i dodałem w odpowiednich miejscach konwersję html do plain text, bo ktoś wrzucił linka w nazwę uzytkownika.

Dzięki, wszystkim za podpowiedzi.
com
Cytat
Chodzi o przewidywalność. Bo jak robię OPTIONS to nie spodziewam się w odpowiedzi usuniętego posta...
I na tym można właśnie polegnąć, jak chociażby świetnym przykładem jest to co się tu pojawiło, oczekujemy stringa a user daje nam tablice. Dlatego założenie, że user zrobi wszytko według specyfikacji wcale nie zwalnia nas z kontroli tego co się tam jednak dzieje, bo jak coś się posypie to nie powiesz ale przecież w RFC napisali że tak nie wolno. Dlatego to ma silny związek z bezpieczeństwem, bo Ty swoje a user jak będzie chciał kombinować to itak będzie to robił i a nóż coś się nam da. Bo nawet GET będący niby tylko do odczytu potrafi wiele zepsuć jak się go nie odfiltruje i wykorzysta się go gdzieś potem w naszej aplikacji, albo fragment w url, on wgl nie trafia na serwer wiec nie da się z jego poziomu go kontrolować, a stron na nich opartych jest coraz więcej. Nawet Adobe przez to zarobiło sporą wtopę jakiś czas temu.
aras785
Cytat(Spawnm @ 7.06.2015, 22:09:04 ) *
Wysłałem pole foo nie jako string ale jako tablice, czyli np w kodzie zmieniłem name="foo" na name="foo[]"


Dość dawno temu zauważyłem na facebooku podobny "bug":

https://www.facebook.com/search.php?o=274&init=dir&q[]=test

Wynikiem jest: Array smile.gif
webmaniak
Kilka uwag:
-brak info o błędzie w przypadku wpisania błędnych danych - walidacja jest tylko na required,
-walidacja tylko po stronie php, dane są usuwane z inputów po przeładowaniu,
-kompletnie nie wiem gdzie mam zobaczyć frontend aplikacji
-edycja kategorii to widok wpisów w danej kategorii-questionmark.gif czyli nie mogę zmienić nazwę kategorii jak się pomylę i będzie literówka ...
-dodawanie nowego wpisu -> wybór kategorii jest "średni" bo wszystkie są w jednej linii - nie wiem co jest rodzicem, a co potomkiem,
-zdjęcia: po dodaniu nowego zdjęcia nie mam informacji o powodzeniu operacji, brakuje też miniaturki dla mojego zdjęcia - dodałem plik jpg
-przy usuwaniu zdjęcia błędy- ale chociaż usuwa <jupi>
-strona nie jest responywna nawet na desktopie

Generalnie bardzo słabo. Korzystasz z CI i bootstrapa a nie wykorzystujesz ich możliwości...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.