2012-04-15 14 views
0

Ich habe einen Informationsbaum, der in einem JSON-Objekt an den Client gesendet wird. In diesem Objekt möchte ich keine rohen IDs haben, die von der Datenbank kommen. Ich dachte daran, einen Hash der ID und ein Feld im Objekt (z. B. Titel) oder ein Salz zu machen, aber ich befürchte, dass dies schwerwiegende Auswirkungen auf den Verarbeitungsaufwand haben könnte.Sichern von Datenbankschlüsseln für die clientseitige Verarbeitung

SELECT * FROM `things` where md5(concat(id,'some salt')) = md5('1some salt'); 

Gibt es eine Standardmethode, IDs in dieser Situation zu verdecken?

+0

Sie vertrauen also nicht das Skript, das Sie mit den Daten in Ihrer Datenbank schreiben? – ChrisK

+0

Wenn Sie der Brücke zwischen den Web- und Datenbankservern nicht vertrauen, sendet die vorgeschlagene Methode das Salz über die Brücke, um Informationen zu bestätigen - indem Sie ein Salz durch die Brücke senden, können Sie auch einfachen Text verwenden, um nach ID zu suchen. – ChrisK

+0

mögliches Duplikat von [Wie man eine sequentielle Hash-ähnliche Funktion entwickelt] (http://stackoverflow.com/questions/9804100/how-to-design-a-sequential-hash-like-function) – Quentin

Antwort

1

Ich denke an zwei Möglichkeiten für Sie:

1) Sie jede ID Pre-Hash und speichern mit der rohen ID in der Datenbank. Dies ist möglicherweise eine gute Idee, abhängig von den Beschränkungen der Datenbankgröße und -größe.

2) Schreiben Sie eine einfache Hash-Funktion selbst! Ich könnte Ihnen etwas einfaches vorschlagen, wenn Sie keine Ideen haben. Nur weil es einfach ist, heißt das nicht, dass es nicht gut ist, solange nur du weißt, wie es funktioniert! Ich gehe davon aus, dass die Funktion auf dem Client-Ende nicht de-hashed wird. Persönlich bevorzuge ich Verarbeitungsfunktionen (wie Hash-Funktionen), die auf dem serverseitigen Code-Ende anstatt auf dem db-Ende verwaltet werden, weil ich es mag, dass MySQL so frei wie möglich bleibt, um Daten mit der minimal möglichen Latenz zurückzugeben.

0

Sie können eine neue Spalte mit den Werten md5(concat(id,'some salt')) erstellen und diese berechnen, bevor Sie die SELECT-Anweisung zum Speichern des Berechnungsaufwands ausführen.

1

Eine Option könnte sein, die php-Sitzungsdaten zu verwenden, um die Liste der IDs zu speichern, die an den Client gesendet werden, mit der Hash-ID # s.

Dies bedeutet, dass jedes Mal ein einmaliges Hash gesendet wird, das beim nächsten Ladevorgang nicht gefunden werden kann.

Die Hash-IDs können eingerichtet werden, aber Sie denken (md5 mit Salz wird in diesem Fall funktionieren, aber alles einfache tun) und speichern sie in einem Array in der Sitzung.

Versuchen Sie, dies möglichst in der Datenbank zu vermeiden.

Verwandte Themen