2017-03-04 4 views
1

Ich entwickle eine Webanwendung mit socket.io. Ich verwende derzeit die Socket-ID als eine Kennung, die an andere Clients gesendet wird. Nun gab es Sicherheitsbedenken darüber, ob diese ID verwendet werden könnte, um eine andere Benutzersitzung zu entführen. Leider ist es extrem schwierig, online Informationen dazu zu finden.Sollte die Socket-ID socket.io geheim sein?

Also - sollte die Socket-ID geheim gehalten werden oder kann ich sie sicher als öffentliche Kennung verwenden?

Antwort

3

Ein Client kann nichts direkt mit einer socket.id tun. Wenn Sie also zulassen, dass die ID bekannt ist, entstehen keine neuen Sicherheitslücken. Wenn Ihr Server jedoch ermöglicht, dass Dinge an einem Socket ausgeführt werden, wenn nur eine ID bekannt ist, müssen Sie die Risiken für die vom Server bereitgestellten Vorgänge ermitteln. Wir können diese nicht wirklich kommentieren, da Sie uns keinen Code oder kein Design gezeigt haben.

Wenn beispielsweise Ihr Server einen Nachrichtenaufruf "buy" unterstützt und lediglich eine ID für einen Client zum Auslösen einer Kaufoperation erforderlich ist, kann dies zu einem Problem führen, wenn Sie die ID öffentlich bekannt geben. Aber solange die einzigen Operationen, die mit einer ID arbeiten, die Ihr Server dem Client zur Verfügung stellt, für die Öffentlichkeit auf irgendeinen Socket zugreifen sollen (z. B. ihnen eine Nachricht senden), sollte es kein Problem geben.

Also - sollte die Socket-ID geheim gehalten werden oder kann ich sie sicher als öffentliche Kennung verwenden?

Es ist völlig in Ordnung als öffentliche Kennung und das ist einer der Dinge, für die es da ist. Es sollte als ein Bezeichner verwendet werden (wie in "Ich möchte eine Nachricht an Bob senden, damit ich dem Server mitteilen kann, dass er eine Nachricht an seine ID senden soll"), aber nicht als Autorisierung. Wenn Sie es öffentlich machen, ist es kein Geheimnis und sollte daher nicht von Ihrer eigenen Server-API für die Autorisierung verwendet werden.

Ich denke, ich hätte etwas genauer sein sollen. Ich habe mich gefragt, ob es für einen böswilligen Benutzer möglich ist, seine Anfragen mit einem fremden Socket-Objekt (das ich als Sitzungs-Cache verwende) durch Paketfälschung durch die Bereitstellung einer anderen Socket-ID zu paaren. Ich nehme aus Ihrer Antwort, dass das nicht der Fall ist - also vielen Dank!

Die socket.id wird von socket.io nicht im Transport selbst verwendet. Sie können also nichts Bösartiges tun, indem Sie vorgeben, jemand zu sein, der Sie nicht nur sind, weil Sie ihre socket.id kennen. In der Tat, so gut ich weiß, kennt der Client nicht einmal die socket.id - es wird innerhalb der Serverimplementierung zur Identifikation und zum Nachschlagen eines bestimmten Clients verwendet.

+1

Ich denke, ich hätte etwas genauer sein sollen. Ich habe mich gefragt, ob es für einen böswilligen Benutzer möglich ist, seine Anfragen mit einem fremden Socket-Objekt (das ich als Sitzungs-Cache verwende) durch Paketfälschung durch die Bereitstellung einer anderen Socket-ID zu paaren. Ich nehme aus Ihrer Antwort, dass das nicht der Fall ist - also vielen Dank! – cwry

Verwandte Themen