Bezpečnost Nette AJAX GET vs. POST

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Joacim
Člen | 229
+
0
-

Zdravím, mám vlastní CMS napsaný v Nette a Doctrine2, kde jsem se snažil vše maximálně zabezpečit, ale někdy musím nasadit CMS i na weby kde není SSL(HTTPS) a spojení není šifrované. K zobrazení firmulářů používám klasická bootstrap forms, který bohužel nedokáži naimplementovat do Nette Forms.

Pro přihlášení používám login page kde mám bootstrap form a v nette mám jen zachytávání formuláře.
Zajímá mě jestli je tento postup bezpečný a zda má $form->addProtection(); nějaký význam když nevytvářím formulář klasicky přes nette form továrnu, případně co jak změnit.

public function createComponentSignInForm() {
        $form = new Form();
        $form->addProtection();
        $form->addText('userName');
        $form->addPassword("password");

        $form->onSuccess[] = array($this, "signInFormSucceeded");
        return $form;
    }

    /**
     * Attempt to login.
     */
    public function signInFormSucceeded($form) {

        // get credentials
        $values = $form->values;

        try {
            $this->getUser()->setExpiration('4 hours', TRUE);
            $this->getUser()->login($values->userName, $values->password);
            $this->redirect(":Home:default");
        } catch (AuthenticationException $e) {  // Invalid login
            $this->flashMessage($e->getMessage(), "danger");
            $this->redirect(":Login:default");
        }
    }

Další věc co mě zajímá je Nette Ajax a posílání GET vs POST požadavku, tuto část dělal můj kolega a všude odesílá data přes GET, když jsem se ptal proč neposílá data přes POST, řekl že mu to nefungovalo v nette

// uložení dat z editace uživatele přes UI dialog
$.nette.ajax({
                        type: 'GET',
                        url: "?do=renderUser" + action,
                        data: {
                            "user_pers_id": uid,
                            "user_data": dataObject
                        },

Tyto požadavky může vykonávat pouze přihlášený uživatel s potřebnými oprávněními, ale i tak by mě zajímalo jak třeba odesílat změnu hesla přes ajax a pokud možno jak zprovoznit ajax post odesílání pokud je bezpečnější.

Děkuji

David Matějka
Moderator | 6445
+
0
-

bohužel nedokáži naimplementovat do Nette Forms.

myslis netteForms.js? a co ti nefungovalo?

nevytvářím formulář klasicky přes nette form továrnu, případně co jak změnit.

nevim, co myslis nette form tovarnou

když jsem se ptal proč neposílá data přes POST, řekl že mu to nefungovalo v nette

asi to nepouzil spravne.

ale i tak by mě zajímalo jak třeba odesílat změnu hesla přes ajax a pokud možno jak zprovoznit ajax post odesílání pokud je bezpečnější.

oboje je uplne stejne nesifrovane, takze kdyby nekdo odposlouchaval komunikaci, tak je to jedno. Problem s GET je, ze ty informace jsou primo v URL a tu mohou napriklad webove servery logovat do nejakeho access.log. Z tohohle pohledu je POST lepsi

Joacim
Člen | 229
+
0
-

David Matějka napsal(a):

bohužel nedokáži naimplementovat do Nette Forms.

myslis netteForms.js? a co ti nefungovalo?

nevytvářím formulář klasicky přes nette form továrnu, případně co jak změnit.

nevim, co myslis nette form tovarnou

když jsem se ptal proč neposílá data přes POST, řekl že mu to nefungovalo v nette

asi to nepouzil spravne.

ale i tak by mě zajímalo jak třeba odesílat změnu hesla přes ajax a pokud možno jak zprovoznit ajax post odesílání pokud je bezpečnější.

oboje je uplne stejne nesifrovane, takze kdyby nekdo odposlouchaval komunikaci, tak je to jedno. Problem s GET je, ze ty informace jsou primo v URL a tu mohou napriklad webove servery logovat do nejakeho access.log. Z tohohle pohledu je POST lepsi

Měl jsem na mysli klasické forms

{layout '../@login.latte'}

{block content}

<section id="login">
    <div class="container-fluid">
        <div class="row">
            <div class="col-xs-12">

                <div class="form-wrap">

                    <form n:name="signInForm" role="form" action="" method="post" id="login-form" autocomplete="off" class="form-signin">
                        <div class="logo">
                            <img src="">
                        </div>
                        <h1>Login to </h1>

                        <div class="form-group input-group">
                            <span class="input-group-addon"><i class="fa fa-user"></i></span>
                            <input type="text" n:name="userName" id="username" class="form-control" placeholder="Username" required>
                        </div>
                        <div class="form-group input-group">
                            <span class="input-group-addon"><i class="fa fa-lock"></i></span>
                            <input type="password" n:name="password" id="key" class="form-control" placeholder="Password" required>
                        </div>

                        <input type="submit" id="btn-login" class="btn btn-lg btn-custom btn-block" value="Log in">

                        <hr>
                        <div id="footer">
                            <div class="row">
                                <div class="col-xs-12">
                                    <p> | <i class="fa fa-copyright"></i> 2016</p>
                                </div>
                            </div>
                        </div>
                    </form>
                </div>

            </div> <!-- /.col-xs-12 -->
        </div> <!-- /.row -->
    </div> <!-- /.container -->
</section>

<div id="flashmessages">
    <div n:foreach="$flashes as $flash" n:class="flash, $flash->type">{$flash->message}</div>
</div>
{/block}

a dříve jsem jen do latte dal klasicky {control registrationForm} bohužel nastavení spanů a dalších prvků bylo už celkem obtížné a hlavně zdlouhavé proto mám klasicky formulář vypsán v latte viz. výše a jen mám inputy atd přes n:name apod:.

Proto mě zajímalo zda má vůbec nějakou cenu dávat k formuláři který přebírá inputy $form->addProtection();

Našla by se někde ukázka jak správně použít Nette Ajax pomocí POST ? Hledal jsem ve foru ale nic jsem nenašel

Editoval Joacim (8. 3. 2016 20:21)

CZechBoY
Člen | 3608
+
0
-

Tak ono je jedno jestli si udělám k formuláři v komponentě šablonu a potom v nadřazený šabloně zavoláš {control registrationForm} nebo ho tam vykreslíš ručně.

Joacim
Člen | 229
+
0
-

CZechBoY napsal(a):

Tak ono je jedno jestli si udělám k formuláři v komponentě šablonu a potom v nadřazený šabloně zavoláš {control registrationForm} nebo ho tam vykreslíš ručně.

tzn že $form->addProtection(); vždy funguje a je jedno jak volám form ?, chci jen vědět jak případně zabezpečet formy a jak posílat ajax requesty aby byly co nejméně náchylné na napadení

akadlec
Člen | 1326
+
0
-

Kdyby ses podíval na vygenerovaný zdrojový kód tak bys zjistil že ti na konci formu nette přidalo hidden inputy a mimojiné je mezi nimi i ten protection field.

akadlec
Člen | 1326
+
+1
-

A ad ty requesty…měl by sis to rozdělit na GET = získání dat ze serveru, POST = poslání dat na server, třeba právě zpracování formu.