Bezpečnost Nette AJAX GET vs. POST
- Joacim
- Člen | 229
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
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
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)
- Joacim
- Člen | 229
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í