7
votes

Ouvrez le site Web dans le navigateur par défaut de l'utilisateur sans les laisser lancer autre chose?

J'aimerais ouvrir un site Web dans le navigateur Web par défaut d'un utilisateur. Toutefois, étant donné que l'URL est définie par l'utilisateur, je voudrais également les empêcher de faire autre chose que d'ouvrir un site Web.

J'ai vu des gens utiliser processus.start (URL); Pour ouvrir un site dans le navigateur par défaut, mais étant donné que l'URL est définie par l'utilisateur, je veux être sûr qu'ils n'entrent pas quelque chose comme un emplacement de script et l'exécuter.

Je ne veux pas non plus utiliser processus.start ("iexplore", URL); car je préférerais ouvrir le lien dans le navigateur par défaut de l'utilisateur.

Y a-t-il une façon d'ouvrir un site Web dans le navigateur par défaut de l'utilisateur, sans les laisser lancer aucun autre processus ou commande?

Modifier

Par exemple, je ne souhaite pas que les utilisateurs puissent entrer c: \ windows \ nottepad.exe dans le champ du site Web du client et ouvrir le bloc-notes lorsqu'ils cliquent sur le lien du site Web

Edit # 2

Je suis pas à la recherche d'un moyen de filtrer l'accès de l'utilisateur en ligne ou d'avoir ce substitut à la sécurité de la propriété. Je cherche simplement un moyen d'empêcher les utilisateurs de lancer toute autre application en entrant dans une mauvaise URL. S'ils entrent "Google" pour un site Web d'un client, il ne doit pas lancer une boîte de dialogue OUVERT avec le fichier, mais lancer le navigateur Web par défaut de l'utilisateur avec le mot "Google" dans l'URL


19 commentaires

J'aurais dit d'intégrer le navigateur dans votre application, mais vous ne serez pas en mesure de le faire pour le navigateur par défaut , mais uniquement pour un navigateur pré-spécifié (normalement, c'est-à-dire).


Comment l'URL "utilisateur défini"? Entrez-ils dans une zone de texte? Pouvez-vous expliquer le flux de travail [prévu] un peu plus?


Vérifiez simplement qu'il commence par "http: //" ou "https: //"?


@Weekendwarrior: Par exemple, un client peut avoir un site Web que l'utilisateur entre. Le site Web est affiché dans le cadre de l'enregistrement client et clique sur le site Web devrait y aller.


@Blorgbeard Les utilisateurs ne vont généralement pas sur le site Web lorsqu'ils trouvent les données, elles l'entrent simplement. Très souvent, les données ne viennent pas avec un préfixe HTTP / HTTPS et parfois, cela n'inclut même pas le www


On dirait que votre problème réel est "Comment valider une URL donnée est sécurisé" - peut-être que le client doit avoir une sécurité Web en place? Un dispositif de sécurité de passerelle ou quelque chose de ...


@Rachel Dans ce cas, vous ne pouvez pas utiliser processus.start (URL) de toute façon ..


@Blorgbeard: Même les URL HTTP / HTTPS parfaitement valides ne sont pas sûres pour certains navigateurs, voir par exemple Ceci: McAfee.com/theat-Intelligence/vulnérabilité/... < / a> Bien que cette une vulnérabilité spécifique est probablement maintenant corrigée partout, d'innombrables autres, comme cela, il existe probablement, esp. sur des ordinateurs qui ne sont pas correctis.


@Blorgbeard je ne veux pas utiliser cela parce que cela n'arrête pas quelqu'un qui entre dans le chemin d'un script malveillant et l'exécute en cliquant sur le lien


@Rachel: Hmm, mais ne l'exécutent-ils pas sur leur propre ordinateur quand même? Ou l'utilisateur qui entre dans l'URL et l'utilisateur dont le navigateur est lancé sont des personnes distinctes?


Combiné à la réponse de Piskvor ci-dessous, si vous êtes préoccupé par le contenu des sites externes, vous pouvez présenter un avertissement à l'utilisateur "Vous êtes sur le point d'ouvrir un lien externe ..." et des boutons Continuer / Annuler. Avoir une option pour le désactiver (par exemple, après la première fois), sinon ce serait vraiment ennuyeux.


Voulez-vous empêcher l'utilisateur d'exécuter des scripts / fichiers sur le disque dur local ou de les télécharger du net? Ou les deux?


@Rachel Quoi que vous fassiez, il semble que quelqu'un puisse entrer un site Web malveillant et l'exécuter. En fait, ils pourraient entrer une URL parfaitement bonne, mais que ce site Web aurait pu être piraté et servir des logiciels malveillants le jour où il a été cliqué. Je ne comprends pas vraiment pourquoi vous pensez que votre demande devrait être responsable de la sécurité des sites Web externes - c'est pour l'environnement des clients. Sauf si j'ai complètement mal compris votre question ...?


Qu'en est-il de l'URL Fichier: // C: / Windows / - Avez-vous besoin de bloquer cela?


Google dispose d'une API de navigation en toute sécurité .... code.google.com/apis/safebowsing/ développeurs_guide_v2 .html


@RB Nous avons un filtre de contenu / pare-feu en place qui bloque la plupart des sites Web et tous les téléchargements Internet. @Piskvor La plupart des utilisateurs exécutent la demande via des services Terminal Server, de sorte que le script malveillant serait exécuté sur nos serveurs, non sur une machine locale.


@Rachel Quand j'ai vu votre réponse, j'ai enfin compris la question. Désolé - j'avais été complètement la mauvaise piste (bien que je pense que je n'étais pas le seul !!).


@RB j'ai ajouté un exemple. Désolé s'il y avait une certaine confusion ...


@Rachel: AHA, cela le rend plus clair. En effet, vous devrez peut-être filtrer à la saisie de données - "Les sites Web doivent commencer par http (s): //" ou somesuch.


7 Réponses :


1
votes

Je pense que vous pouvez vérifier l'URL pour confirmer qu'il s'agit d'une URL valide non un chemin d'un fichier exécutable.

Vous pouvez utiliser des expressions régulières pour valider l'URL, consultez ici ici .

bonne chance!


1 commentaires

Il existe tellement de différents types d'URL et d'applications qui construisent une regex pour cela serait un cauchemar



3
votes

Eh bien, pas vraiment. Ce que vous pourriez faire, c'est vérifier s'il s'agit d'une URL http (s), et si l'URL renvoie un type de contenu Texte / HTML - mais même cela aidera que le navigateur utilise le contenu reniflant (ignore le contenu -Type, essaie de le déterminer à partir du contenu du fichier - IIRC IE6 le fait-il, pas sûr de ce que les autres).

En outre, divers navigateurs sont sensibles à divers trous de sécurité dans les URL mal formées (pourquoi cela vous intéresse-t-il à nouveau?), vous voudrez peut-être vérifier des choses comme NULL Hacks, EOL Hacks, etc.

En fin de compte, il n'y a pas de vérification de l'URL parfait - Les navigateurs vieux / non non valables seront toujours sensibles à certains exploits, et ce n'est pas vraiment quelque chose que vous pouvez réparer. Vous pouvez toutefois filtrer la plupart d'entre eux - que ce soit de 80%, 99% ou 99,99%, dépend du temps que vous êtes prêt à investir.


0 commentaires

6
votes

Vous pouvez rechercher le navigateur par défaut du registre. C'est dans plusieurs endroits différents, mais je pense que HKEY_CURRENT_USER \ logicielle \ classes \ http \ shell \ open \ commande serait un bon endroit pour regarder.

extraire le nom exécutable à partir de celui-ci, puis processus.start avec l'URL entrée par l'utilisateur en tant que paramètre.


2 commentaires

Merci, j'avais réellement que travailler juste avant de poster ceci :) Savez-vous si cela fonctionne avec d'autres systèmes d'exploitation Windows ou si des autorisations spéciales sont nécessaires pour accéder à cette clé dans un environnement Terminal-Server?


Je le ferais .. provisoirement .. Attendez-vous à ce que cela fonctionne au moins Win2k et en hausse. Et il ne devrait pas y avoir de problèmes d'autorisations pour accéder à HKCU, mais je n'ai pas d'expérience avec les services Terminal Terminals. Je vous conseille donc de la tester soigneusement :)



5
votes

J'ai trouvé un moyen de le faire, mais je n'ai pas testé pour voir si cela fonctionnera sur d'autres systèmes d'exploitation

I Obtenir le chemin de navigation pour le greffe du registre, puis utilisez processus.start ( faultBrowserPath, URL); xxx


10 commentaires

Comment protège-t-il l'utilisateur?


Oooooh - maintenant je comprends. Vous êtes préoccupé par les personnes qui lancent un processus que n'est pas le navigateur, car ils ont défini l'URL sur "C: \ Windows \ NotePad.exe".


@RB: Que se passe-t-il lorsque "http \ shell \ open \ commande" est "c: \ windows \ notepad.exe"?


@Dan il ouvre la chaîne définie par l'utilisateur dans un WebBrowser au lieu de simplement lancer une chaîne définie par l'utilisateur et en espérant avoir entré une URL.


@Piskvor La plupart des utilisateurs n'ont pas accès au registre


@Rachel: Ceci est dans le HKEY_CURRENT_USER HIVE, IIRC Toute utilisateur a des autorisations à modifier ici (car il s'agit de sa propre ruche, par opposition à HKEY_LOCAL_MACHINE ). Donc, aucun utilisateur a accès à cette partie du registre, l'accès à l'écriture même (bien que cela puisse être limité par des politiques, il se produit rarement).


@Rachel: c: \ windows \ notepad.exe est une adresse valide dans IE, de même que l'URI d'un script malveillant hébergé sur le Web. Que protégeez-vous l'utilisateur en forçant un navigateur pour ouvrir le contenu?


@Dan utilisateurs ne sont pas en mesure de télécharger des articles en ligne et en mettant NOTEPAD.EXE dans WebBrowser, il vous le télécharge et vous demande si vous souhaitez l'exécuter ou le sauvegarder. Mettre le chemin d'accès à un fichier de script fait la même chose, ou dans certains cas (tels que des fichiers de lots), il affiche simplement le contenu du fichier de script. Ça ne les gère pas.


@Rachel Si l'utilisateur souhaite exécuter NotePad.exe, ils peuvent cliquer sur le bouton Démarrer, tapez le bloc-notes, appuyez sur Entrée et, hey Presto! Notepad.


@David Oui, ce n'était pas une question destinée à être utilisée pour la sécurité, il s'agissait d'avoir sur le point de faire la demande du comportement attendu.



2
votes

Si je vous comprends bien, il n'y a pas de solution au problème que vous décrivez. Vous dites: Comment filtrer les données saisies par l'utilisateur ( espérons-le-dire sous la forme d'une URI, mais même une URI est un concept très large) pour que ce n'est pas un contenu malveillant. La réponse est que sans le faire manuellement, vous ne pouvez pas.

http://here.dowloadmyvirus.com est un site de site parfaitement valide, mais vous ne pouvez jamais jamais garantir le contenu qui sera servi de là.

Il n'est pas nécessaire de ne pas être un URI: si vous appuyez sur Démarrer / exécuter et tapez "iexplore c: \ windows \ notessad.exe" alors (avec ie9 rtm), je reçois mon propre NotePad.exe Lancé comme un téléchargement. Il n'y a rien pour vous arrêter de pointer sur un script malveillant hébergé en ligne.

Je suggérerais que vous deviez soit limiter l'accès afin que seuls quelques utilisateurs de confiance puissent modifier toutes les données que vous devez gérer ou avoir un processus d'audit en place pour vous assurer que ce contenu est validé avant sa publication.


1 commentaires

Les utilisateurs sont principalement sur les services Terminal avec quelques autorisations strictes. Ils ne peuvent rien télécharger en ligne, ils ne peuvent pas installer des applications, il existe un filtre de contenu et un pare-feu en place qui aide à la plupart des sites Web mauvais, ils ont des autorisations très limitées pour faire quoi que ce soit. Je ne cherche pas un moyen de filtrer un accès Web, je cherche un moyen d'empêcher les utilisateurs de lancer des scripts ou des applications via l'URL qu'ils peuvent entrer. En bref, je souhaite ouvrir le navigateur Web par défaut des utilisateurs et transmettre une URL, pas seulement aller processus.start (URL);



1
votes

Il me semble que vous vous inquiétez de quelque chose qui n'est pas un problème. Si l'utilisateur pourrait exécuter un programme plutôt qu'une URL de votre application, ils pourraient aussi bien gérer un programme eux-mêmes. Ce n'est qu'une préoccupation de sécurité si vous acceptez l'entrée de certaines entités autres que l'utilisateur connecté.


0 commentaires

2
votes

J'ai travaillé sur une manière, qui profite du fait que JavaScript circule dans un bac à sable.

avoir une page Web (par exemple, http: //mydomain/launchpage.html ) qui est accessible à votre application de bureau. Appelez-le en mettant votre URL sur la chaîne de requête (donc http: // mydomain /Launchpage.html?url=http://www.google.com ). P>

Tout le tableau de bord est d'utiliser JavaScript pour définir le document.Location. P>

Process.Start("c:\<InstallRoot>\LaunchPage.html?URL=C:\Windows\Notepad.exe") 


2 commentaires

Merci, mais ce n'est pas une application Web. Quelqu'un a redressé ma question initiale. C'est une application de bureau WPF utilisant c #


@Rachel Cela fonctionne également pour une application WPF. Plutôt que d'utiliser process.start (URL) (ou quelle que soit la solution que vous proposez), vous utilisez processus.start ("http: //mydomain/launchpage.html? Url =" + URL) à la place. Ainsi, tout ce dont vous avez besoin est un fichier HTML unique dans votre application WPF - cela pourrait être sur le système de fichiers local ou assis sur un serveur de fichiers central ou en cours d'exécution sur un serveur Web. Peu importe. Voir mon édition ...