PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sicherheit von JavaScript


[Dirk]
2012-07-17, 17:53:20
Hallo, ich habe eine Anfängerfrage, und zwar:

Wenn ich mich per Ajax auf meiner Seite anmelde und den Wert user_rechte von der Login.php per echo userrechte zurückgebe um dann von JavaScript aus die Seite entsprechend zu designen. D.h. Es werden je nach userrecht verschiedene divs angezeigt.

Ist es jetzt möglich dass ein User einfach die Variable userrechte auf zb 100 setzt und schon ist er Admin?

Ich hoffe, dass klar ist, was ich meine...

Gast
2012-07-17, 19:07:10
;9390017']Hallo, ich habe eine Anfängerfrage, und zwar:

Wenn ich mich per Ajax auf meiner Seite anmelde und den Wert user_rechte von der Login.php per echo userrechte zurückgebe um dann von JavaScript aus die Seite entsprechend zu designen. D.h. Es werden je nach userrecht verschiedene divs angezeigt.

Ist es jetzt möglich dass ein User einfach die Variable userrechte auf zb 100 setzt und schon ist er Admin?

Ich hoffe, dass klar ist, was ich meine...

Ja, ist möglich und ein großes Sicherheitsrisiko. Generell gilt: Alles, was vom Client kommt, kann gefälscht sein. Sensible Sachen wie z.B. Rechte-Management musst du daher immer auf Server-Seite regeln.

[Dirk]
2012-07-17, 21:17:11
Ok, ich habe eigentlich auch die ganze Anmelderei mit php und Sessions gelöst. aber wie soll ich die Seite dementsprechend gestalten, wenn ich per javascript ja eine Rückmeldung über den Status der Rechte benötige.

Ich weiß, ich könnte auf jegliches js verzichten, aber dann wird die Seite so starr...

Hier mal ein Link von der Seite:
http://www.denkste-nachhilfe.de/test1

Username und pw sind: test

Ich hoffe ich mache grad keinen Fehler und gebe sichere Daten bekannt....

ohohoh :(

Es ist ja leider für jeden möglich alles einzusehen, d.h. auch die js Dateien. Somit ist ja die Sicherheit futsch...

Falls irgendwo eine große Sicherheitslücke besteht bitte sofort melden :) Danke :)

Gohan
2012-07-17, 22:23:43
Deine Seite ist offen wie ein Scheunentor. Ich kann die Elemente sogar einblenden, ohne mich anzumelden, ganz einfach über die JavaScript Konsole. Noch einfach geht's einfach über den DOM Inspector, wo ich dann nur das display:none Attribut entfernen muss.

So was darf man nicht client-seitig umsetzen, und schon gar nicht glauben, das ein einfachen verstecken des entsprechenden div's mit display:none irgendwas mit Sicherheit zu tun hat.

Da du aber bereits Sessions verwendest, kannst du zumindest darauf aufbauen. Du musst bei jeder Aktion, die an den Server gesendet wird, zuerst prüfen ob der Benutzer das auch darf und ansonsten gegebenenfalls abbrechen.

Dadurch könntest du z.B. die benötigten Elemente dynamisch nachladen, was natürlich nur dann funktionieren sollte, wenn der Nutzer entsprechende Rechte hat.

[Dirk]
2012-07-17, 22:30:59
Deine Seite ist offen wie ein Scheunentor. Ich kann die Elemente sogar einblenden, ohne mich anzumelden, ganz einfach über die JavaScript Konsole. Noch einfach geht's einfach über den DOM Inspector, wo ich dann nur das display:none Attribut entfernen muss.

So was darf man nicht client-seitig umsetzen, und schon gar nicht glauben, das ein einfachen verstecken des entsprechenden div's mit display:none irgendwas mit Sicherheit zu tun hat.

Da du aber bereits Sessions verwendest, kannst du zumindest darauf aufbauen. Du musst bei jeder Aktion, die an den Server gesendet wird, zuerst prüfen ob der Benutzer das auch darf und ansonsten gegebenenfalls abbrechen.

Dadurch könntest du z.B. die benötigten Elemente dynamisch nachladen, was natürlich nur dann funktionieren sollte, wenn der Nutzer entsprechende Rechte hat.

Ok. Hab ich mir gedacht. Ich habe bisher js immer gemieden und daher Null Erfahrung damit.

Ich prüfe jede Eingabe immer per php auf Richtigkeit, nicht schon vorher. Ich verstehe deine letzen beiden Absätze leider nicht.

Gohan
2012-07-17, 22:38:10
;9390486']Ok. Hab ich mir gedacht. Ich habe bisher js immer gemieden und daher Null Erfahrung damit.

Ich prüfe jede Eingabe immer per php auf Richtigkeit, nicht schon vorher. Ich verstehe deine letzen beiden Absätze leider nicht.

http://api.jquery.com/load/

[Dirk]
2012-07-17, 22:55:15
Oje, irgendwie fehlt mir der Durchblick. Heißt das, dass ich zb eine addnews.php Datei erstellen sollte, und die dann dynamisch mit .load Laden soll die dann das Formular addnews anzeigt, wenn der Benutzer angemeldet ist?

Evtl hilft mir eine kurze grundlegende Vorgehensweise.

fdk
2012-07-17, 23:42:50
Es gibt zu ajax (mit oder ohne jquery) gefühlte 1,337*10^6 tutorials im Netz ...
http://www.w3schools.com/jquery/jquery_ajax.asp

Im einfachsten Fall lädst du einen statischen Text nach (enorm witzlos aber passt als Beispiel).
$("div").load('derp.txt');

Jetzt musst du eben in deiner dirk.php dafür sorgen, dass du für deinen übergebenen Parameter den passenden output zurückbekommst.

$("div").load('dirk.php?p=pinkypie');

Oder du gibst eine map mit (derp.php in $_POST bzw $_REQUEST)
$("div").load('dirk.php',{'pony': 'pinkypie'});

[Dirk]
2012-07-18, 00:08:59
Hmm, kann ich eine Datei addNews.php wie folgt erstellen:


1. Php-Part: prüfen ob der User angemeldet ist und entsprechende Rechte hat, falls nicht, dann exit.
2. Dann ein html-Part: DIV id=addnews ...


Und dann rufe ich diese addNews.php mittels .load(addNews.php) auf, so dass das DIV addnews eingefügt wird, was ja nur dann gehen sollte, wenn 1. Erfüllt ist, oder?

Ist die Idee ok?

Sorry für die schlechte bzw kurze Schreibweise, aber ich hab grad nur nen iPad zur Hand

RattuS
2012-07-18, 01:26:09
Deine Authentifizierung springt doch sowieso auf die login.php, von der du dann wieder zur index.php zurückspringst. Warum erzeugst du also nicht deine addNews-Box in der index.php und zwar nur dann, wenn in der Session die erfolgreiche Anmeldung und die erforderlichen Rechte vorhanden sind.

So oder so musst du ALLE Daten serverseitig validieren. Beim Web-Development hilft es etwas paranoid zu sein und einfach pauschal jedem Benutzer im Internet nur das Schlechteste nachzusagen, wenn es um Formulardaten und Steuerung geht. Du musst außerdem immer davon ausgehen, dass du allein über POST (ohne Frontend) angegriffen wirst, d.h. clientseitige Validierung (JavaScript) ist grundsätzlich nur Eye-Candy, aber niemals irgendeine Art von Sicherheitsebene.

[Dirk]
2012-07-18, 12:26:50
Guten Morgen :)

So, ich habe es mal so geändert, wie ich es meinte und mit Hilfe des Tips von Gohan mittels .load()
Erst habe ich es so versucht wie RattuS es vorgeschlagen hat, aber es hat nicht funktioniert :(

Wäre super, wenn nochmal jemand drüber schaut. Ich hoffe, dass ich es nicht verschlimmbessert habe :)

RattuS
2012-07-18, 21:00:59
Jetzt musst du nur noch beim Logout dafür sorgen, dass die DIVs auch wieder geleert werden, in die du deine Formulare geladen hast.

[Dirk]
2012-07-18, 21:10:52
Daran habe ich auch schon gedacht, aber wie?

Gohan
2012-07-18, 21:13:22
;9391828']Daran habe ich auch schon gedacht, aber wie?

jQeury Doku oder google hilft! ;) Tipp, hier klicken (http://lmgtfy.com/?q=jquery+empty+div)!

RattuS
2012-07-18, 22:18:06
Ich möchte an dieser Stelle anmerken, dass man JavaScript nie verstehen wird, wenn man immer nur auf jQuery aufbaut.

Steinzeitmenschen Pragmatische Web-Developer hätten es so gemacht:
<script type="text/javascript">
function emptyElement(element) {
if (element == null) return;

element.innerHTML = '';
element.style.display = 'none';
}
</script>

emptyElement(document.getElementById('myDIV'));

[Dirk]
2012-07-19, 00:26:37
Ok ja :)

Ich habe jetzt natürlich einfach jquery mit .empty() benutzt. Ich weiß, dass das ganze nur sehr begrenzt mit javascrpit zu tun hat, aber ich finde es sehr leicht und komfortabel :)

Oder "gehört" es sich nicht jQuery zu benutzen?

PS: Ups :) fast hätte ich vergessen den "Test" Account zu löschen. Ich hoffe, das die Seite jetzt "sicher" ist!
Irgendwie komme ich nur sehr schleppend voran. Ich wollte in spätestens 2 Wochen mit der Webseite fertig sein...

RattuS
2012-07-19, 00:59:12
;9392080']Oder "gehört" es sich nicht jQuery zu benutzen?
Es ist durchaus angemessen darauf zuzugreifen, denn jQuery sorgt nicht nur für einfachere/schnellere Zugriffe, sondern auch für die berühmte Cross-Browser-Compatibility. Aber wenn man Web-Development wirklich lernen will, sollte man eben erstmal verstehen, was jQuery (anders) macht.

;9392080']Irgendwie komme ich nur sehr schleppend voran. Ich wollte in spätestens 2 Wochen mit der Webseite fertig sein...
Du hast mit AJAX halt nicht den einfachsten Weg genommen. Anwendungsentwicklung ist immer eine Frage des Anspruchs. Je mehr Details vorhanden sein sollen (und Details machen Software aus), desto mehr Aufwand ist auch erforderlich. Aber was ist am Ende schöner als ein Projekt mit sehr viel Liebe zum Detail? ;)

[Dirk]
2012-07-20, 22:16:45
Wohl wahr :) aber das Ende ist noch fern... Morgen mach ich die Registrierung fertig (validierung per Email usw)