6
votes

COUCHDB - déterminer la sécurité de la base de données

COUCHDB offre une validation avant de permettre l'inséré d'un objet / une ligne à insérer dans la base de données. Ceci assurez-vous que si vous avez une application de canapée au visage public, votre base de données ne sera pas remplie de junk par n'importe qui. XXX PRE>

Cependant, je suis en train de comprendre ce que On dirait que le processus de conception d'applications standard dans laquelle vous avez un Couche intermédiaire de confiance qui fait une grande partie du travail d'authentification . Par exemple, la plupart des applications Placez Ruby ou PHP entre la base de données et l'agent utilisateur qui permet à l'application de déterminer des informations sur l'agent utilisateur avant de permettre à quelque chose comme un message à enregistrer dans la base de données. P>

User -> Ruby -> MySQL
User <- Ruby <- MySQL


1 commentaires

Je n'ai pas ce qu'il s'agit de "tables"? Parlez-vous de bases de données?


3 Réponses :


1
votes

ne pouviez-vous pas utiliser Validation de Couchdb ?

Les utilisateurs pourraient être marqués. Lors de l'inscription, un utilisateur est ajouté à la base de données des utilisateurs. Il obtient son courrier puis est signalé "valide: vrai" ou quelque chose comme celui-ci lors de la réponse à ce courrier ou en cliquant sur un lien.

avec les utilisateurs de validation ne pouvaient pas seulement être «connectés / sortis» mais également l'autorisation d'accès peut être mise en œuvre avec des droits d'accès plus granulaires. E.g.: Seules les threads de marque ont été résolus si l'un est l'auteur, admin, quoi que ce soit ...

ou cela semble-t-il impraticable?


6 commentaires

À quoi ressemblerait-il dans un programme de travail réel? Qui marque l'utilisateur comme "valide: vrai"? L'objectif est que les utilisateurs exécutent la base de données - mais les utilisateurs ne peuvent pas faire confiance avec des choses comme celle-ci, c'est-à-dire que cela signifie une solution "dans les échanges moyens" (comme le nœud.js ou PHP) devrait venir à droite? Ou est-il possible d'utiliser 100% de Couchdb pure pour résoudre des trucs comme celui-ci?


Bonne question. La base de données est-elle distribuée aux utilisateurs via une réplication (un CouchApp?) Ou ce que l'on entend par "Les utilisateurs exécutent la base de données"? Si vous parlez de reproduire la DB aux instances de CouchDB locales des utilisateurs, vous pouvez alors gérer cela dans une application "maître" où les utilisateurs doivent également configurer la réplication vers leur CouchDB. D'autre part, cela me donne aussi des maux de tête: comment pouvez-vous interdire aux utilisateurs de reproduire "votre" base de données d'applications à un endroit autre ... Je dois dire que je ne suis pas un développeur de CouchDB bien formé, deux seconde avis auront vraiment d'importance ici.


Eh bien, l'objectif que j'ai pour exécuter une application CouchDB est qu'il est autonome (ne s'appuie pas sur Apache ou Ruby / Python / PHP à courir). Puisque CouchDB peut gérer 1 000 d'utilisateurs simultanés (leur donner les documents _Design / _View / _Atachment), je peux "décharger" beaucoup de la logique dans JavaScript et obtenir leurs machines pour traiter tout au lieu d'exécuter PHP ou Ruby sur le serveur. Donc, en substance, je peux construire l'application de Pure HTML et JavaScript et de l'exécuter dans les navigateurs de l'utilisateur pour utiliser la pleine puissance de Couchdb. En d'autres termes, j'aimerais que Couchdb soit la seule chose que j'ai besoin pour exécuter mon site.


Oh, et pour le moment, je ne me soucie pas vraiment de la réplication aux machines des utilisateurs. Bien que ce soit une caractéristique soignée, je dois savoir comment utiliser. ;)


Avez-vous consulté la base de données "_USERS"? Je pense qu'une option serait de mettre les utilisateurs à différents groupes avec un accès différent de lecture / écriture à vos bases de données?


Je pense que vous pensez à cela trop simpliste. Je pourrais manuellement approuver chaque utilisateur . Cependant, c'est une grosse gaspillage d'énergie et je préférerais que Juat leur ait vérifier ce courrier électronique et répondre à une Recaptcha. Toutefois, si l'application est pure HTML / JS CouchApp -, il n'existe aucune partie "fiduciée" qui peut insérer une ligne dans la table des utilisateurs. Ce n'est pas un problème avec une solution de moyenne-de-temps comme Ruby (que je peux faire confiance car elle fonctionne sur mon serveur) pour insérer des lignes dans la base de données. Cependant, étant donné que CouchDB annonce que vous pouvez exécuter une application complète sur HTML / JS -, il doit y avoir une solution.



1
votes

Après avoir parlé avec certaines personnes sur #couchdb IRC, il semble qu'ils ne puissent pas comprendre quelque chose de faire quelque chose d'administrateur (comme des utilisateurs d'activation qui cliquent sur un mail de messagerie) avec un processus "backend" comme une Server Node.js qui garde une trace de l'alimentation _changes.

J'espérais une application pure Couchdb - mais il semble que Couchdb ait toujours un peu de façons d'aller.

Néanmoins, la bonne nouvelle est que vous pouvez remettre 80% de votre logique / traitement de vos applications à vos utilisateurs. Les 20% d'autres seront 1) une instance de nœud.js pour des éléments tels que l'envoi d'e-mails ou de la vérification des fonctions de validation de Recaptcha et 2) des fonctions de validation des enregistrements exécutées dans votre Couchdb et 3) Fonctions de la carte / de la rédaction (requête). Ces trois choses ne peuvent pas être déchargées sur quelque chose de "non soigné" comme un agent utilisateur.


0 commentaires

3
votes

Je penserais à ajouter des rôles aux utilisateurs existants dans ce numéro.

Utilisation de la validation et de la modification de CouchDB _Design / _Auth peut être une bonne idée d'ajouter e-mail , e-mail_verified e-mail_verification_code < / code> dans _USERS de la base de données lorsque l'utilisateur est enregistré.

Pour envoyer du courrier, obtenir la confirmation, renvoyer la confirmation Vous pouvez utiliser des processus externes. (Pour un exemple d'utilisation de processus externe, vous pouvez vérifier Couchdb-Lucene).

Et enfin, vous pouvez à nouveau faire une vérification rapide dans _Design / _Auth dans le processus de mise à jour de l'utilisateur si le code de vérification correspond à des correspondances et ajoutez vérified_user Rôle de cet utilisateur.

De cette façon, toutes vos demandes passeraient sur Couchdb, vous utiliseriez un processus externe uniquement lorsque vous devez envoyer un courrier et obtenir une confirmation.

Edit: Vous avez oublié d'ajouter (car il était assez évident), j'ajouterais un rôle vérifié_user aux lecteurs de base de données.


0 commentaires