2017-10-20 28 views
1

J'ai écrit un service web parce que je voulais que mon javascript y accède par des méthodes sur tout le site en utilisant ajax. Je suis nouveau à cela. Cependant, je viens de réaliser que l'asmx est accessible via le navigateur et il montre une page de test et la sortie xml des données à partir des méthodes. existe-t-il un moyen de désactiver cette interface utilisateur pour le service Web? Je ne veux que renvoyer des données aux méthodes javascript quand elles sont appelées.Rendre le service Web non accessible par navigateur?

+2

Non. Si vous exposez un service via une URL, tout client sur Internet peut y accéder. Vous ne pouvez pas * jamais * dire avec certitude ce qui se trouve à l'autre extrémité d'une requête HTTP. Si vous avez besoin d'un service sécurisé, protégez-le derrière un mécanisme de session authentifié. – Pointy

+1

La page "test" dont vous parlez est tout à fait normale. Les services Web sont exposés avec un document WSDL (Web Service Description Language) et c'est le document que vous voyez. C'est ce qui indique aux clients ce qui est disponible et comment appeler les méthodes. –

+0

bien vous pouvez envoyer des en-têtes et vérifier sur le serveur pour eux, mais n'importe qui peut usurper des entêtes – epascarello

Répondre

1

Je ne suis pas sûr de la version des services Web .NET que vous utilisez, mais vous pouvez désactiver la page d'aide du service Web, qui n'est généralement disponible localement de toute façon. Il peut également désactiver la génération WSDL aussi. Voir https://msdn.microsoft.com/en-us/library/2tyf2t8t(v=vs.100).aspx ou https://www.thecodingforums.com/threads/how-to-disable-modify-the-default-test-pages-for-asmx-web-services.786001/

Si vous souhaitez également empêcher d'autres utilisateurs d'accéder à votre service Web en général, vous devez également prendre en compte les techniques d'authentification.

+0

Merci. Pour l'instant, j'ai seulement exposé des données qui sont de toute façon publiques. Je génère un GUID pour chaque utilisateur et ne diffuse des données que pour ces utilisateurs. Donc, je suppose que c'est bien parce que je garde le GUID sur le serveur et ne jamais exposer à l'interface. –

0

Pas aussi loin que je sache. Votre asmx ne doit pas afficher de données sensibles. Si c'est le cas, vous avez un problème de conception.

Les données XML que vous voyez probablement sont le WSDL. Ce n'est pas une mauvaise chose, en fait c'est ce qui permet aux consommateurs de savoir comment votre WebService est structuré. Pour plus d'informations à ce sujet vous pouvez voir this apge

1

Votre javascript accède à votre service Web de la même manière que vous le faites avec votre navigateur. Fermez votre service depuis votre navigateur, vous le fermez pour votre javascript. Fondamentalement, vous dites que vous avez fait une porte dans votre maison parce que vous voulez être en mesure d'entrer (tout à fait logique!) Mais maintenant vous êtes inquiet parce que tout le monde peut voir la porte (vous auriez pu penser à htat plus tôt !) et l'utiliser (c'est votre vrai problème!).
Alors, que faites-vous? Tu as mis un verrou sur la porte.

Cela ne rend pas la porte invisible, mais empêche les mauvaises personnes.

Vous souhaitez faire de même avec votre service Web: implémenter l'authentification/autorisation. Sur une note de côté: nous sommes en 2017. Je ne savais même pas que les gens utilisaient encore .asmx. Jetez un oeil à WCF, il a plus ou moins remplacé les anciens services Web asmx en 2010 ou plus ...

+0

J'ai récemment appris .NET en effectuant un stage dans une entreprise qui travaillait avec des systèmes hérités construits avec des formulaires Web. J'ai donc appris les anciennes façons et maintenant je comprends que je continue à utiliser l'ancienne technologie. Je dois apprendre la WCF et passer à autre chose. Merci –