2010-03-21 7 views
2

J'essaye de 'AJAX-ify' mon site afin d'améliorer l'expérience de l'interface utilisateur. En termes de performance, j'essaie également de me débarrasser du UpdatePanel. Je suis tombé sur un excellent article sur Encosia montrant une façon de poster en utilisant PageMethods. Ma question est la suivante: dans quelle mesure les méthodes de page sont-elles sécurisées dans un environnement de production? Etant public, quelqu'un peut-il créer un script JSON pour POST directement sur le serveur, ou y a-t-il des vérifications entre domaines? My PageMethods écrirait également les données dans la base de données (après le filtrage). J'utilise l'authentification par formulaires dans mes pages et, lors du chargement de la page, elle redirige les utilisateurs non authentifiés vers la page de connexion. Est-ce que les méthodes de page sur cette page doivent également vérifier l'authentification si l'utilisateur envoie directement à la méthode, ou est-ce que cette authentification est héritée pour la page entière? (Essentiellement, le cycle entier de page se produit-il même si un utilisateur a réussi à publier seulement à la PageMéthode)?PageMethods sécurité

Merci

Répondre

3

Les méthodes de Page sont aussi sécurisées que le gestionnaire dans lequel elles résident. FormsAuthentication protégera tout, sauf la page de connexion.

Sur un gestionnaire non protégé, comme la connexion, vous devez exposer uniquement les méthodes qui 1) ne sont pas sensibles ou 2) valider l'utilisateur.

EDIT: en réponse aux commentaires et d'autres réponses concernant CSRF et XSS s'il vous plaît voir http://weblogs.asp.net/scottgu/archive/2007/04/04/json-hijacking-and-how-asp-net-ajax-1-0-mitigates-these-attacks.aspx

+0

Vous ignorez CSRF. – SLaks

+0

@Slaks - Je ne pense pas. Les méthodes REST requièrent un type de contenu application/json. Vous ne pouvez pas accomplir cela avec un exploit CSRF ou XSS. Il m'a fallu un certain temps pour trouver des preuves corroborantes - voir http://weblogs.asp.net/scottgu/archive/2007/04/04/json-hijacking-and-how-asp-net-ajax-1-0 -mitigates-ces-attaques.aspx –

+0

Salut Sky Sanders. My PageMethod est conçu pour permettre aux utilisateurs de mettre à jour leurs paramètres de profil. J'utilise toujours POST (même lors de la récupération des données) et m'assure que le contentType est défini. Le gestionnaire de page est une norme.gestionnaire d'aspx, où IsAuthenticated est vérifié au chargement de la page. Quand vous dites que FormsAuthentication protégera tout sauf la page de connexion, cela signifie-t-il que l'IsAuthenticated (dans le chargement de la page) sera hérité par la méthode Page, puisqu'ils sont tous les deux sur la même page? – keyboardP

1

Vous essayez de protéger contre les attaques CSRF.

Ces attaques peuvent être évitées en exigeant un code d'autorisation dans les paramètres POST et en fournissant le code d'autorisation dans le chargement initial de la page. (Le code d'autorisation doit être par adresse IP et par utilisateur, et doit expirer rapidement)

Pour plus de sécurité, vous pouvez rendre chaque code d'authentification utilisable une seule fois et demander à chaque demande de renvoyer un nouveau code d'authentification. (Cependant, si une demande échoue, vous devrez recharger la page)

+0

Merci pour l'aide. Pour clarifier, lorsque la page se charge, je devrais générer un code en utilisant des données telles que IP/Session etc ... L'utilisateur envoie alors une requête POST. Comment puis-je obtenir les informations pertinentes dans le paramètre POST du côté client? S'agit-il simplement d'utiliser javascript pour obtenir les informations IP/User-agent et les placer dans les paramètres? – keyboardP

+0

@TenaciousImply - Je ne pense pas simple CSRF/XSS sont une préoccupation dans cette situation. –

+0

@TenaciousImpy: Je voulais dire que le code d'authentification ne devrait fonctionner que pour une seule adresse IP/utilisateur (par exemple, un hachage sécurisé). Cependant, je crois que Sky Sanders est correct et ce n'est pas une préoccupation. – SLaks

0

Pensez PageMethods comme un mini-webservie locale à la page. Le fait est qu'ils n'auront pas de vérifications et vérifications supplémentaires en place, sauf celles qui sont placées sur l'ensemble du site, et celles que vous choisissez de mettre en.

Utiliser Pagemethods est une idée intelligente du point de vue de 'Encapsulation ', et si vous allez les utiliser, ça ne fait pas de mal d'essayer de mettre en place des mesures de sécurité supplémentaires.