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. P>
J'ai vu des gens utiliser Je ne veux pas non plus utiliser 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? p>
Par exemple, je ne souhaite pas que les utilisateurs puissent entrer Edit # 2 STROR> P>
Je suis pas strong> à 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 P> processus.start (URL); code> 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. p>
processus.start ("iexplore", URL); code> car je préférerais ouvrir le lien dans le navigateur par défaut de l'utilisateur. P>
c: \ windows \ nottepad.exe code> dans le champ du site Web du client et ouvrir le bloc-notes lorsqu'ils cliquent sur le lien du site Web P>
7 Réponses :
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. P>
Vous pouvez utiliser des expressions régulières pour valider l'URL, consultez ici ici . p>
bonne chance! p>
Il existe tellement de différents types d'URL et d'applications qui construisent une regex pour cela serait un cauchemar
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 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. P>
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. P> Texte / HTML CODE> - 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). P>
Vous pouvez rechercher le navigateur par défaut du registre. C'est dans plusieurs endroits différents, mais je pense que extraire le nom exécutable à partir de celui-ci, puis HKEY_CURRENT_USER \ logicielle \ classes \ http \ shell \ open \ commande code> serait un bon endroit pour regarder. P>
processus.start code> avec l'URL entrée par l'utilisateur en tant que paramètre. P>
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 :)
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); code> p>
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 B> 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 i> "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 CODE> HIVE, IIRC Toute utilisateur a des autorisations à modifier ici (car il s'agit de sa propre ruche, par opposition à
HKEY_LOCAL_MACHINE code>). 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 code> 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.
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 em> 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. P>
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 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. p> http://here.dowloadmyvirus.com code> est un site de site parfaitement valide, mais vous ne pouvez jamais jamais em> garantir le contenu qui sera servi de là. P >
NotePad.exe Code> 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. P>
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); code>
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é. P>
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")
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) code> (ou quelle que soit la solution que vous proposez), vous utilisez
processus.start ("http: //mydomain/launchpage.html? Url =" + URL) code> à 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 ...
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 i>, 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) code> 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 i> 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 i> 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 / CODE> - 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.