![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 1 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
No dobra, dzisiaj zacząłem nauke PHP i udało mi się po całym dniu wypocić jeden skrypt. Mógłby ktoś mnie zmiażdżyć i wytknąć wszystkie błędy, żebym nie popełniał ich na przyszłość? Generalnie robi to co chcę, czyli odczytuje, wysyła i zapisuje komentarze do pliku csv, jednak może coś da się zrobić w zgrabniejszy sposób? Mam jedną stronę na CMS nieobsługującym komentarzy i chcę skrypt wstawić na jedną podstronę tylko, żeby user mógł sobie wyrazić opinię.
Teraz planuję jeszcze dorobić małe zabezpieczenie w postaci pytania i zliczanie znaków. Gdy będzie mniej niż ileś, komentarz się nie zapisze. Aha. I powrót na poprzednią stronę po wysłaniu. Dałoby radę dać jakąś podpowiedż jakie funkcje mi w tym pomogą? Ten post edytował robert-s 24.05.2012, 23:45:12 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 18 Dołączył: 7.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Cytat zliczanie znaków strlen Cytat powrót na poprzednią stronę header np.
Proponuję także zabezpieczyć się przed XSS oraz w jakiś sposób zabezpieczyć kod przed niechcianymi znakami. W tym przypadku będą to przecinki, czyli znaki oddzielające. zabezpieczyć się przed XSS: przykładowo skorzystać z funkcji htmlspecialchars. zabezpieczyć kod przed niechcianymi znakami: proponuję zamienić przecinki [,] na html'owy ich odpowiednik [,]. W tym celu możesz skorzystać z funkcji preg_replace. np. delimiter w funkcji fgetcsv, jest defaultowo przecinkiem, więc ten argument jest zbędny. #edit Dodałem spację między &, a # ze względu na parser w komentarzu - automatycznie zamieniał na przecinek. Odnośnie samego skryptu sprawdzającego proponuję także upewnić się, że dane w ogóle zostały podane! Zakładając, że znasz warunki pokażę fragment kodu.
Zabezpieczy to bezpośrednie wejście na stronę wyslij.php bez wysłania formularza (bez warunku, odwiedzenie owej strony zakończy się dodaniem pustego wpisu). Ten post edytował ethann 24.05.2012, 22:23:42 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 1 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wielkie. Już uzupełniam skrypt.
Ten post edytował robert-s 24.05.2012, 23:07:41 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Kod wstawiaj w BBCode PHP: [ php ] ... [ / php ], nie cytaty.
2. Jeżeli jako drugi argument fgetcsv ustawiony na 1000, to wypadałoby albo upewnić się przy dodawaniu nowego wpisu, że jego łączna długość w pliku nie przekroczy tych 1000 znaków, albo ustawić ten argument za zero by funkcja zawsze odczytywała cały wiersz. 3. Nigdy nie używaj jakiś magicznych, nic nie znaczących stałych w kodzie (patrz: $tablica[0], $tablica[1], $tablica[2]). W pętli wyświetlającej dane, od razu przypisz sobie poszczególne elementy tablicy do normalnych zmiennych (list). CSV to fatalny format do przechowywania komentarzy. Znacznie lepszym rozwiązaniem byłoby wykorzystanie np. XML-a, który nie będzie miał problemów, gdy ktoś wrzuci w treść komentarza przecinek (znak separatora) albo nową linię. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 1 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
Kod trochę pozmieniałem już. Odnośnie zabezpieczenia przed atakami XSS. Czy jest różnica między miejscem użycia funkcji htmlspecialchars.
Przy odczytywaniu z pliku CSV w celu wyświetlenia komentarzy na stronie: Przy użyciu $_POST w drugim pliku (wyslij.php): Testowałem oba i wynik dla usera jest ostatecznie taki sam, czyli np. jesli spróbuje wstawić pogrubienie to wyświetli się < b> treść < /b >. Z wszczepienia javascript też nici chyba. Troche inaczej zapisuje w pliku CSV. W pierwszym przypadku < b > w drugim & l t ; b & g t ; Wolałbym używać opcji pierwszej, bo dla drugiej funkcja strlen daje wyższe wartosci. Jednak czy to jest bezpieczne? Może mi ktoś wszczepić kod PHP i wywołać jakieś niemiłe rzeczy? Ten post edytował robert-s 25.05.2012, 16:40:03 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Powinieneś używać tylko i wyłącznie pierwszego wariantu. Znaki <>&"' są niebezpieczne dopiero w dokumencie HTML.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 728 Pomógł: 76 Dołączył: 12.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dodam jeszcze taką ciekawostkę kiedy używasz:
masz niewielki narzut spowodowany tym, że parser odczytuje kod z cudzysłowów i szuka znaków specjalnych i zmiennych w środku. Lepiej w takim przypadku dać bez cudzysłowów. Dla czystych zmiennych tekstowych lepsze są apostrofy. Cudzysłów jest dobry (wygodniejszy) kiedy w środku masz zmienne lub znaki specjalne i tekst. Ten post edytował amii 25.05.2012, 19:44:08 -------------------- gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet. Zarabianie bez wysiłku na domenach bez ruchu: prolink. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 09:11 |