Bezpieczeństwo Javascript: czy przechowywanie poufnych danych w funkcji samo wywołującej jest bezpieczniejsze niż pliki cookie?
Wiem, że zabezpieczenia są albo nieistniejące, albo bardzo trudne w JavaScript po stronie klienta. Wiem, że mój kod po stronie serwera powinien ostatecznie decydować o tym, komu dane są przekazywane lub akceptują dane.
To powiedziawszy, czy jest to w porządku, aby to zrobić. Przez „okay” mam na myśli, jeśli to była metoda zastosowana w jakiejś nowej popularnej modnej fajnej aplikacji internetowej. Czy mogę spać w nocy, wiedząc, że nie zobaczę „Super fajnej aplikacji internetowej włamanej, zmień swoje hasła!” w całej HN i Reddit (lub w innych źródłach informacji, na których zależy ludziom) w wyniku tej implementacji.
Jeśli nie jest bezpieczny. Czemu? W jaki sposób można uzyskać te informacje (nazwę użytkownika i hasło)?
Jeśli jest bezpieczny? Jak bardzo jesteś pewny? Dlaczego jest bezpieczny? Co powstrzymuje mnie przed otrzymaniem tych informacji poza moją oczywistą niezdolnością w tej chwili.
Częściowe odpowiedzi są mile widziane. Po prostu szukam lepszego zrozumienia.
EDYTOWAĆ
Myślę o przypadku niektórych próbujących ukraść dane uwierzytelniające użytkowników. Rozumiem, że pliki cookie są niepewne, ponieważ 1.) inne javascripty (przez XSS lub cokolwiek innego) mogą uzyskać do nich dostęp, a ponieważ 2.) są przekazywane w sposób jawny. I rysunek SSL zajmie się drugim problemem i pozwala po prostu założyć, że jestem w stanie zapobiec XSS. Teraz wydaje się, że pliki cookie są teraz bezpieczne, prawda?
Zdaję sobie sprawę z niektórych rzekomych luk w przeglądarce, które pomagają w zabezpieczeniu plików cookie. To sprawiło, że zadałem to pytanie. Biorąc pod uwagę wszystkie rzeczy, które sprawiają, że ciasteczka są niepewne, czy jest to (kod poniżej) lepsze?
http://jsfiddle.net/KTastrophy/vXEjm/1/ LUB zobacz poniższy kod (testowany tylko w Chrome)
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form id="login">
<div>
<label for="username">Username</label>
<input id="username" name="username" type="text" />
</div>
<div>
<label for="password">Password</label>
<input id="password" name="password" type="password" />
</div>
<div>
<input id="submit" name="submit" type="submit" value="Login" />
</div>
</form>
</body>
<script type="text/javascript">
;(function () {
"use strict";
var login, user = {};
login = document.getElementById("login");
login.onsubmit = function (event) {
event.preventDefault();
user.username = document.getElementById("username").value;
user.password = document.getElementById("password").value;
/*
use the username and password here to do
an API request over SSL using HTTP Auth
*/
}
}());
</script>
</html>