![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 5 Dołączył: 6.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam, piszę sobie formularz rejestracyjny w PHP z wyszczególnianiem niewypełnionych pól. Kod może trochę nieoptymalny, ale działałby, gdyby klasa nie tworzyła się za każdym razem po przesłaniu formularza. Jest to jakoś do obejścia, czy raczej powinienem sobie dać spokój, bo w PHP się tego nie stworzy? Dodam, że mam inny pisany kiedyś z nudów kod, który działa, ale zajmuje mi 4x tyle miejsca i sam się w nim gubię
![]() A działanie tego kodu jest takie, że jak nacisnę "rejestruj", wszystkie pola dostaję na niebiesko z hasłem "proszę uzupełnić". I nigdy nie udaje mi się go wysłać. Z pewnością działałby, gdybym odwoływał się bezpośrednio do zmiennych z $_POST, ale wolę tego unikać, bo czytałem jakiś artykuł o atakach XSS gdzie coś było, że tworzy to lukę dla takiego ataku.
Ten post edytował hyhyhy 23.07.2011, 16:50:06 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A po co robisz formularz jako osobną klasę, którą i tak nigdy do niczego już nie wykorzystasz? Zrób normalnie HTMl + PHP bez takich zabaw.
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 729 Pomógł: 346 Dołączył: 4.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Nazwanie tego tworu klasą to duże niedopowiedzenie brakuje tu po prostu mnóstwa rzeczy (np. brak sprawdzania czy formularz został wysłany, przecież to ciebie powinno zasypać warningami/noticeami). Dodatko poczytaj sobie o xss i jak działa, a nie
Kod bo coś przeczytałem gdzieś, ale nie pamiętam co, ale wiem, że coś robiło Zacznę więc od początku:
Jeżeli używasz posta powinieneś najpierw sprawdzić czy zmienne zostały ustawione (czyli wysłany formularz funkcja isset);
od php 5 nie powinno się używać var tylko public/protected/private
Wytłumacz mi czemu w tym miejscu ustawiasz htmlspecialchars i mysql_real_escape, jeżeli masz zapisać w bazie to dopiero tam dawaj mysql_real_escape, a htmlspecialchars dawaj tylko przy wyświetlaniu (ba obie funkcje używasz na tablicy). Ten for jaki masz działa tak czy jest ustawiona tablica czy nie przypisz całą tablicę $_POST['form'] do zmiennej $this->form[$i], czyli każdy element tablicy $this->form ma teraz całą tablicę $_POST['form'] Nie jestem pewien co htmlspecialchars/mysql_escape zrobi jak mu się poda tablicę zamiast stringa chyba false albo pusty string, ale nie chcę mi się sprawdzać. No tu mnie zagiąłeś, powiedz mi czemu to ma służyć? wyświetlasz/zapisujesz to gdzieś?
W tym momencie jeżeli coś było przesłane (cokolwiek) to zwróci true. Zamiast całej te sieczki można było zrobić
Formularz ma masę błędów składniowych typu
Czyli co masz zrobić: -poczytaj o klasach -naucz się html -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 5 Dołączył: 6.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Okej, rozumiem, że całość do przepisania
![]() Cytat a htmlspecialchars dawaj tylko przy wyświetlaniu Widocznie "słabo" poczytałem, tekst był po angielsku, więc może źle zrozumiałem, że każde odwołanie do "surowej" zmiennej z POST/GET stwarza lukę do xss. To mi ułatwia sprawę w takim razie. Ogólnie dzięki za zainteresowanie, przerobię go jak należy i powinno działać. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 729 Pomógł: 346 Dołączył: 4.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
xss jest groźny tylko i wyłącznie przy wyświetlaniu czegoś na stronie, dlatego przy wyświetlaniu danych od użytkowników warto dać htmlspecialchars aby nie mogli odpalać js/html. Zawsze jest lepiej mieć czystą wersję w bazie (szczególnie jeżeli to może być edytowane unikamy wtedy bawienia się z hmlentitydecodem). Więc jeszcze raz dawaj specialcharsa tylko przy wyświetlaniu ba stronie, a przy zapisie do bazy dawaj mysl_real_escape. I zawsze sprawdzaj przy formularzach czy wymagane pola zostały ustawione
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 16.07.2025 - 16:04 |