Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zabezpieczenie skryptu który dodaje wpis do bazy
Forum PHP.pl > Forum > XML, AJAX > AJAX
Kuba707
Mam sobie skrypcik na dodawanie newsów do bazy (tylko dla zalogowanego na admina - sesja PHP). Składa się on z trzech plików:
- admin.php - plik w którym jest formularz na dodawanie newsa i inne bajery
- functions.js - funkcje JS, jQuery
- sendmessage.php - skrypt PHP na wysyłanie zapyań do bazy odpalany przez AJAXA

Czyli no wypełniam sobie formularz, klikam dodaj, odpala sie funkcja JS, mała walidacja i jeśli wszystko ok to ajaxem wysyła zapytania do pliku sendmessage.php
Ale jak to zabezpieczyć. Użytkownik może przecież podpatrzeć mój kod JS w podglądzie strony i wywołać ręcznie funkcje tak żeby przeszła pierwsze dwa ify. Kod wygląda tak:
Kod
function sendNews()
{
    var titleV = document.newspanel.title.value;
    var contentV = document.newspanel.content.value;
    
    if(titleV.length < 3)
    {
        $("div#result").css({"color":"#D50000", "font-weight":"bold"});
        document.getElementById("result").innerHTML = "Tytuł newsa musi zawierać od 3 do 58 znaków.";
    }
    else if(contentV.length < 1)
    {
        $("div#result").css({"color":"#D50000", "font-weight":"bold"});
        document.getElementById("result").innerHTML = "Próbujesz wysłać pustą wiadomość.";
    }

//.....

Może przecież w Google Chrome otworzyć stronę, edytować treść jako HTML, dodać formularz, wpisać odpowiednie dane i wpisać adres
Kod
java script:sendNews(); // to forum oddziela 'java' od 'script' - w tym wypadku te dwa wyrazy mają być połączone;d
No nie? Chyba że się myle i się tak nie da.

To jest jedno. Ale jak zabezpieczyć sam plik sendmessage.php? Zawartość pliku to łączenie z bazą, wysłanie zapytania i zamknięcie bazy. Równie dobrze ktoś sobie może zrobić własny skrypt i wysłać postem informacje do mojego skryptu (ofc nie zna nazwy pól, no ale....). No więc jak to skutecznie zabezpieczyć?
osl
zawsze musisz mieć walidacje danych wejściowych po stronie serwera.
w JS możesz zrobić coś co ładnie wygląda, jest funkcjonalne itp, ale nie możesz na tym tylko polegać.
skoro masz admina, to przy dodawaniu newsa po prostu sprawdzaj, czy użytkownik jest zalogowany jako admin. jak nie, podziękuj grzecznie i nie dodawaj nic.
Kuba707
Oczywiście zgadzam się że trzeba zrobić dodatkowo walidację po stronie serwera wink.gif
Ale co do tego sprawdzania czy jest adminem, to jeśli dam w pliku sendmessage.php
Kod
echo 'Czy jest zalogowany: '.$_SESSION['LOGGED'];

to mając w kodzie jQuery na wysyłanie wiadomości takie coś:
Kod
success: function(result)
            {
                $("div#result").css({"color":"#008AF0", "font-weight":"bold"});
                document.getElementById("result").innerHTML = "Wysłanie AJAXem powiodło się. ";
                alert('Rezultat (testowo): ' + result);
            }

to wynik jaki dostaje to:
Kod
Rezultat (testowo): Czy jest zalogowany:

A powinna jeszcze na końcu być jedynka.

@Edit po dwóch dniach.
Mam pytanie. Da się to jakoś skutecznie zabezpieczyć aby dodawanie newsów na stronę poprzez jQuery AJAX było to bezpieczne? Czy może jednak takie rzeczy lepiej zrobić w samym PHP a AJAXA używać do mniej priorytetowych celów jak odświeżanie elementu strony, itp? smile.gif
krowal
Wywołanie jakiejś akcji przez AJAX nie różni się niczym od zwykłego wejścia, oprócz tego że jest wykonywane w tle. Obsługę sesji i wszystko inne robi się tak samo i można na tym samym polegać. Nie ma żadnych zastrzeżeń co do wykonywania ważnych akcji AJAX'em jeśli zrobisz odpowiednie sprawdzanie praw użytkownika w wykonywanym skrypcie.

A w swoim skrypcie wywoływanym przez AJAX zrób tak:
  1. echo 'Czy jest zalogowany: '.$_SESSION['LOGGED'];
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.