2009-05-25 5 views
1

Dies ist eine JavaScript-Sicherheitsfrage: Angenommen, eine Seite ermittelt die Bildschirmauflösung des Computers (z. B. 1024 x 768) und möchte diese Daten mithilfe eines AJAX-Aufrufs in der Datenbank protokollieren.javascript securty: ein AJAX-Anruf, um die Bildschirmauflösung des Benutzers aufzuzeichnen, ist es möglich, gefälschte Zahlen zu verhindern?

Gibt es eine Möglichkeit, zu verhindern, dass gefälschte Daten in die Datenbank eingegeben werden? Ich denke, was auch immer der HTML oder Javascript tut, kann der Benutzer den Code zurückentwickeln, so dass einige gefälschte Zahlen in die DB eingegeben werden, oder gibt es eine Möglichkeit, es vollständig zu verhindern? (100% sicher).

Update: oder in einer ähnlichen Situation ... wenn ich ein einfaches Javascript-Spiel schreibe ... gibt es eine Möglichkeit für den Benutzer, die Punktzahl von AJAX zurückzuschicken und über ihre Punktzahl zu lügen?

+1

Warum möchte ein Benutzer über seine Auflösung lügen? Was, wenn sie unterschiedliche Maschinen in verschiedenen Sitzungen verwenden (Desktop bei der Arbeit mit zwei Monitoren und Laptop anderswo), und diese Maschinen haben unterschiedliche Auflösungen? – DOK

+0

siehe Update oben in einer ähnlichen Situation –

Antwort

5

Wenn Sie mit der Annahme beginnen, dass der Benutzer, mit dem Sie kommunizieren, bösartig ist, dann nein; Es gibt nichts, was Sie tun können, um zu kontrollieren, welche Daten an Sie weitergegeben werden. Sicherlich nicht mit hundertprozentiger Sicherheit - im schlimmsten Fall können sie Netzwerk-Tools verwenden, um irgendwelche "richtigen" Inhalte mit allem, was sie wollen, neu zu schreiben oder zu ersetzen.

Wenn Sie nur gelegentlichen Schaden verhindern möchten, können Sie Ihren Code und/oder Daten verschleiern oder verschlüsseln. Dies wird einen entschlossenen Angreifer nicht abschrecken.

Wenn Sie tatsächlich dem echten Benutzer vertrauen, aber vermuten, dass andere versuchen könnten, sie zu imitieren, können Sie andere Techniken wie einen dynamischen Kanarienvogel verwenden: Senden Sie dem Benutzer eine Zufallszahl, und wenn sie dieselbe Nummer an Sie zurückgeben weiß, dass es wirklich von ihnen kam. (Oder Sie werden von einem Man-in-the-Middle-Angriff getroffen, aber hey; dafür steht SSL.)

2

Es ist nicht möglich, Benutzer daran zu hindern, beliebige Nummern zurück von JavaScript zu senden.

Ich denke, das Beste, was Sie tun können, ist eine Überprüfung auf der Serverseite, um sicherzustellen, dass die zurückgeschickten Zahlen wie eine realistische Auflösung aussehen.

Ich bin nicht sicher, warum jemand die Zeit verbringen würde, diese Zahlen in erster Linie zu spoofen.

+0

oh nur eine allgemeine Sicherheitsfrage ... nur für Spaß und Neugier wirklich ... –

+0

Eine Vernunftprüfung ist offensichtlich eine gute Idee. Aber Sie haben recht, es garantiert keine genauen Daten. –

1

Ja, Sie haben Recht. Da Sie clientseitigen Code verwenden, müssen Sie den Computer des Benutzers (und damit den Benutzer) auf die eine oder andere Art und Weise informieren, unabhängig davon, welche Verschlüsselung oder Verschleierung Sie verwenden. Es gibt keinen Weg um ihn herum.

1

Für die Auflösung wäre es grundsätzlich unmöglich festzustellen, ob es sich um eine gültige Auflösung handelt. Meine Auflösung wird normalerweise als 5120 x 1600 an den Server gesendet, was ziemlich unrealistisch erscheint, aber das liegt daran, dass die 2 Bildschirme oft als 1 gesendet werden. Ansonsten gibt es eine so große Vielfalt an Möglichkeiten bei Bildschirmauflösungen und Bildschirmkonfigurationen. Ich werde wahrscheinlich viele gültige entfernen, obwohl sie vielleicht einige sind.

Für den Spielstand könnten Sie zusätzliche Überprüfungen durchführen, die die Überprüfung komplizierter machen. Dinge wie das Senden mehrerer Hinweise auf die Punktzahl während des Spiels und erfordern X-Nummer, um sicherzustellen, dass der Punktestand erhalten gültig ist. (IE, muss eine zwischen 200-300, 400-500, 700-800 und dann die endgültige Punktzahl von 1000 erhalten.) Mit dem Endergebnis könnten Sie auch eine Art verschlüsselten Wert haben, der nur einmal verwendet werden kann oder der enthält einige Daten mit einem CRC darauf. Im Grunde, am Ende, erfordern andere Daten als nur die Punktzahl, vor allem für höhere Punktzahlen.

+0

Je nach Spiel, als ob es ein browserbasiertes Spiel wäre, wäre es am besten, den Punktestand auf dem Server selbst zu berechnen und sich nicht mit AJAX zu beschäftigen, aber für Flash-Spiele und dergleichen ist dies sicherlich nicht der Fall Weg zu gehen. –

1

Um eine Antwort zu versuchen, indem Sie auf Kommentare von Dok und Ihnen selbst eingehen, gibt es einen klaren Unterschied zwischen der Manipulation einer Anwendung, um es aus etwas "zu betrügen", sei es ein Online-Geschäft etwas billiger zu bekommen oder ein MMPORG, um mehr Erfahrung zu erhalten, als es so zu manipulieren, dass es die Schnittstelle falsch darstellt und die allgemeine Benutzererfahrung für diesen bestimmten (Hacker?) Benutzer verringert.

Ihre Zeit wäre besser, um sich auf andere Aspekte Ihrer Website zu konzentrieren. Ich empfehle den Benutzern meiner Website nicht, den HTML-Code so zu manipulieren, dass er auf ihren Rechnern lustig aussieht, aber ich werde nicht alles rauslassen und meine Serverausgabe verschleiern, um sie daran zu hindern, sich selbst zu verletzen. In Ihrem Fall bedeutet die Bereichsüberprüfung anhand vordefinierter sicherer Werte unter Verwendung der Datenbank, dass der Benutzer eine "zulässige" Auflösung anzeigt, unnötige Belastung für Ihre Anwendung und benötigt Zeit.