eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.www › Bezpieczeństwo komunikacji Ajax
Ilość wypowiedzi w tym wątku: 8

  • 1. Data: 2013-10-29 10:48:44
    Temat: Bezpieczeństwo komunikacji Ajax
    Od: Marek <p...@s...com>

    Witam,

    Chciałbym Was podpytać jak bezpiecznie zrealizować następujące zadanie.
    Otóż mamy sobie tabelkę z rekordami z bazy danych.Powiedzmy imię,
    nazwisko itd plus jeden checkbox. Zmiana stanu tego checkboxa ma
    powodować zmianę w rekordzie użytkownika. Pomyślałem sobie, że zrobię to
    tak:

    <input type="checkbox" onChange="update(ID_usera, wartosc)"...

    Funkcja update zawiera kod Ajax'a i wykonuje asynchroniczną komunikację
    z serwerem. Wszystko fajnie, ale teraz wyobraźmy sobie sytuację, w
    której ktoś ma przeglądarkę z obsługą JS w trybie konsoli i może tam
    wszystko z palca wpisać. Nie ma ta osoba dostępu do podstrony WWW (bo
    np. wymagane są do tego jakieś uprawnienia). No i wpisuje sobie
    update(100,5) i aktualizuje się setny użytkownik...

    Jak weryfikować czy żądanie pochodzi w właściwej (pod)strony i może
    zostać obsłużone?

    --
    Pozdrawiam
    Marek


  • 2. Data: 2013-10-29 11:09:15
    Temat: Re: Bezpieczeństwo komunikacji Ajax
    Od: Marek <p...@s...com>

    P.S.
    Chodzi mi o to, że w przypadku zwykłego formularza, możemy pozostać na
    danym URLu i tylko dany URL (skrypt PHP) będzie umiał obsłużyć formularz
    z tej strony. Jeśli użytkownik nie posiada uprawnień do bycia na tejże
    stronie, to nie dostanie się tym samym do tego formularza i nie będzie
    miał szans namieszać. Daje to jakiś poziom wiarygodności (a już w
    szczególności gdy posłużymy się ukrytym polem ID transakcji zmienianym
    po każdym przeładowaniu formularza).

    Tymczasem funkcja JS może być wywołana na każdej podstronie serwisu więc
    tak jakby "wirtualny formularz" był wszędzie opublikowany i potrafił być
    na każdej stronie obsłużony więc każdy użytkownik bez żadnych uprawnień
    może zmienić rekord w bazie będąc np. na stronie głównej serwisu.

    --
    Pozdrawiam
    Marek


  • 3. Data: 2013-10-29 13:26:17
    Temat: Re: Bezpieczeństwo komunikacji Ajax
    Od: "Neevor@W" <p...@n...ru>

    Marek wrote:

    > Funkcja update zawiera kod Ajax'a i wykonuje asynchroniczną komunikację
    > z serwerem. Wszystko fajnie, ale teraz wyobraźmy sobie sytuację, w
    > której ktoś ma przeglądarkę z obsługą JS w trybie konsoli i może tam
    > wszystko z palca wpisać. Nie ma ta osoba dostępu do podstrony WWW (bo
    > np. wymagane są do tego jakieś uprawnienia). No i wpisuje sobie
    > update(100,5) i aktualizuje się setny użytkownik...
    >
    Umieścić skrypt wyłącznie na tej jednej podstronie ;)

    Generalnie na końcu obsługi zdarzenia uruchamiasz jakiegoś POSTa.
    Ten POST idzie na konkretny URL.
    Po stronie serwera sprawdzasz, czy aktualny użytkownik ma prawo wywołać
    tego URLa. Jeśli może, kontynuujesz... Jeśli nie, 404, 401, 503 czy co
    ci tam do głowy przyjdzie.
    --
    GCA/ED d s+:++ a C++ ULA P+++ L+ E--- W+++ N+++ o+ K- w+++ O+ M+ V-
    PS PE++ Y-- PGP- t-- 5-- X+ !tv R b+ DI-- D+ G e++ h--- r+++ z+++*


  • 4. Data: 2013-10-29 13:45:32
    Temat: Re: Bezpieczeństwo komunikacji Ajax
    Od: Marek <p...@s...com>

    W dniu 2013-10-29 13:26, Neevor@W pisze:

    >
    > Generalnie na końcu obsługi zdarzenia uruchamiasz jakiegoś POSTa.
    > Ten POST idzie na konkretny URL.
    > Po stronie serwera sprawdzasz, czy aktualny użytkownik ma prawo wywołać
    > tego URLa. Jeśli może, kontynuujesz... Jeśli nie, 404, 401, 503 czy co
    > ci tam do głowy przyjdzie.

    Ok, to łapię. Jednakże może się zdarzyć, że użytkownik ma prawo do URL'a
    wysłanego z Ajaxa ale przebywa na URLu, spod którego wspomniane
    wywołanie Ajaxowe nie ma sensu. Przykładowo jesteśmy w edytorze listy
    klientów gdzie możemy wykasować któregoś z nich. Klikamy "kasuj" obok
    nazwiska, wołamy skasuj(ID_klienta), Ajax wykonuje akcję, użytkownik znika.

    Teraz sytuacja "patologiczna", przed którą chciałbym się uchronić.
    Użytkownik jest zalogowany, ma prawo do kasowania klientów i nie jest w
    edytorze użytkowników lecz np. na stronie głównej serwisu. W jakiś
    sposób wywołuje z konsoli skasuj(234). Co z tym zrobić? Pozwolić na
    skasowanie klienta 234? Niby wolno to zrobić ale nie z tego miejsca.
    Funkcja skasuj() nie wie skąd może być wywoływana więc sama siebie nie
    może zweryfikować. Z kolei po stronie PHP też nie mam jak tego sprawdzić
    (chyba) z uwagi na to, że wywołania Ajax'a nie są związane z żadnym
    URLem. A może nie przejmować się tym wcale i pozwalać na takie operacje?

    --
    Pozdrawiam
    Marek


  • 5. Data: 2013-10-30 02:03:00
    Temat: Re: Bezpieczeństwo komunikacji Ajax
    Od: Exe Very Cute <k...@p...onIet.pl>

    W dniu 2013-10-29 13:45, Marek pisze:

    > Teraz sytuacja "patologiczna", przed którą chciałbym się uchronić.
    > Użytkownik jest zalogowany, ma prawo do kasowania klientów i nie jest w
    > edytorze użytkowników lecz np. na stronie głównej serwisu.

    A co za różnica czy zrobi to z GUI czy z palca? Efekt ten sam.

    Pozdr
    Exe Very Cute


  • 6. Data: 2013-10-30 08:03:38
    Temat: Re: Bezpieczeństwo komunikacji Ajax
    Od: "Neevor@W" <p...@n...ru>

    Marek wrote:

    > jest [...] na stronie głównej serwisu. [...] wywołuje z konsoli skasuj(234)
    >
    Po prostu nie udostępniasz funkcji skasuj na stronie głównej.
    Dzielisz skrypty funkcjonalnie na wszystkie podstrony.
    Dodatkowo wydzielasz grupę która jest dostępna wszędzie i ładujesz
    zależnie od kontekstu te JSy które są aktualnie potrzebne.
    Podobnie mozesz zrobić z CSSami czy szablonami dla $.tmpl.

    Tak to mniej więcej wygląda u mnie (po stronie serwera):
    w zmiennej $content jest aktualnie wyświetlona podstrona

    public function __construct($content = "", $data = null) {
    parent::__construct();
    if ($content !=='') {
    $this->loadContentTemplate($content);
    $this->addScripts('/saleconfig/js/colResizable-1.3.s
    ource.js');
    $this->addScripts('/saleconfig/chosen/chosen.jquery.
    min.js');
    $this->addScripts('/saleconfig/chosen/jquery.uniform
    .js');
    $this->addCSS('/saleconfig/new_styles.css');
    $this->addCSS('/saleconfig/chosen/chosen.css');
    $this->addScripts('/js/compareClass.js');
    }
    if($content === 'mainMenu') {
    $this->addCSS('/css/mainMenu.css');
    $this->addScripts('/js/mainMenu.js');
    $this->render();
    }else{
    switch($content){
    case 'testPage':
    $this->addScripts('/js/test.js');
    $this->addCSS('/css/test.css');
    $tmpls= new
    Template(SiteConfig::getInstance()->templatesRoot().
    '/testtmpls.html');
    $this->mainTemplate->replaceVariable('<!--[jslike_te
    mplates]-->',
    $tmpls->source);
    break;
    case 'customers':
    $this->addScripts('/saleconfig/customers.js');
    $this->addScripts('/saleconfig/customersList.js');
    $this->addScripts('/js/formValidation.js');
    $this->addScripts('/js/displayList.js');
    $jsLike = new
    Template(SiteConfig::getInstance()->templatesRoot().
    '/jstmpls.html');
    $this->mainTemplate->replaceVariable('<!--[jslike_te
    mplates]-->',
    $jsLike->source);
    break;
    case 'assorts':
    $this->addCSS('/saleconfig/assortsList.css');
    $this->addCSS('/saleconfig/pricesCharts.css');
    $this->addCSS('/saleconfig/css/uniform.css');
    $this->addScripts('/js/compareClass.js');
    $this->addScripts('/lib/paperjs/paper.js');
    $this->addScripts('/js/pricesCharts.js');
    $this->addScripts('/saleconfig/assorts.js');
    $this->addScripts('/saleconfig/assortsList.js');
    $this->addScripts('/js/uomValidation.js');
    $this->addScripts('/js/formValidation.js');
    $templates = new



    i tak dalej...
    --
    GCA/ED d s+:++ a C++ ULA P+++ L+ E--- W+++ N+++ o+ K- w+++ O+ M+ V-
    PS PE++ Y-- PGP- t-- 5-- X+ !tv R b+ DI-- D+ G e++ h--- r+++ z+++*


  • 7. Data: 2013-10-30 21:40:18
    Temat: Re: Bezpieczeństwo komunikacji Ajax
    Od: Marek <p...@s...com>

    W dniu 2013-10-30 02:03, Exe Very Cute pisze:

    > A co za różnica czy zrobi to z GUI czy z palca? Efekt ten sam.

    Właśnie tak zacząłem kombinować, że nie ma czym się przejmować.


    --
    Pozdrawiam
    Marek


  • 8. Data: 2013-10-30 21:44:18
    Temat: Re: Bezpieczeństwo komunikacji Ajax
    Od: Marek <p...@s...com>

    W dniu 2013-10-30 08:03, Neevor@W pisze:

    >>
    > Po prostu nie udostępniasz funkcji skasuj na stronie głównej.
    > Dzielisz skrypty funkcjonalnie na wszystkie podstrony.

    Hmm... jest to jakieś rozwiązanie. Choć z drugiej strony przy portalach
    często używanych generuje to mnóstwo żądań HTTP.

    Przemyślę tą koncepcję choć Exe słusznie zwrócił uwagę, że jeśli user ma
    uprawnienia do operacji, to jeśli będzie miał fantazję ułańską wykonać
    operację z poziomu konsoli, to niech sobie ją robi.

    --
    Pozdrawiam
    Marek

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: