none
Ouvrir une URL

    Question

  • Bonjour tout le monde,

    Par mail ou dans un forum (usenet notamment), on peut se voir proposer une URL vers un document. Quand cette URL est proposée par quelqu'un dont le client de mail ou de news fonctionne bien, c'est simple il suffit de cliquer dessus. Mais certains clients de news coupent la ligne au bout d'une longueur donnée, 50 ou 60 caractères par exemple, et donc l'URL est proposée sur plusieurs lignes, à charge pour qui voudra lire le document de tout remettre sur la même ligne.

    Il y a quelques années j'ai mis en ligne un programme qui copie la sélection vers le presse-papiers, en retire les sauts de lignes, et ouvre l'URL résultante dans un webBrowser.

    Le webBrowser étant une émulation d'une version ancienne d'Internet Explorer, qui varie d'une machine à l'autre en fonction de facteurs que j'ignore (chez moi, c'est IE6, d'autres ont la version 7, d'autres la 4 ...) ça donne parfois un résultat pas évident du tout à lire.

    J'ai trouvé sur GitHub un contrôle équivalent qui lui émule une version, plus récente, de Firefox, l'ennui étant que je n'ai pas trouvé comment faire pour m'en servir. Quelqu'un a-t-il réussi à utiliser ça ?

    Qu'à cela ne tienne, j'ai créé une nouvelle version de mon programme qui ouvre l'URL sur le navigateur par défaut.

    Pour réaliser ça, Google m'a proposé ShellExecute, dans les API Windows.

    Et le fait est que ça fonctionne très bien.

    Ah oui, seulement ... Dans un forum de sécurité on ne m'a pas fait que des éloges sur cette façon de procéder.

    Il y aurait moyen de limiter les risques en ajoutant http:// devant l'URL sauf si le protocole est déjà précisé dedans, mais ... il doit y avoir plus propre.

    Alors dites voir, pour ouvrir une URL sous C# avec le navigateur par défaut, quel est le meilleur moyen ?

    (accessoirement : j'ai réalisé mon programme dans le module program d'un projet Winform dont j'ai supprimé le formulaire créé par défaut ; j'imagine qu'un projet console aurait aussi bien fait l'affaire)



    • Modifié Gloops lundi 5 décembre 2016 13:17
    lundi 5 décembre 2016 13:09

Réponses

  • Il n'y a pas de problème de sécurité du moment où l'on sait ce que l'on lance.
    Par exemple Windows lui-même utilise ShellExecuteEx() lorsqu'on double-clique sur un fichier ou que l'on fait "Ouvrir avec"...
    • Marqué comme réponse Gloops lundi 5 décembre 2016 16:57
    lundi 5 décembre 2016 16:19

Toutes les réponses

  • Bonjour,

    using System.Diagnostics;
    
    Process.Start("http://www.google.com/");

    Cordialement.


    ZGuideTV.NET - administrator/developer

    lundi 5 décembre 2016 13:58
  • Process.Start();
    utilise logiquement ShellExecuteEx(), qui est la façon standard d'ouvrir les URL avec le navigateur par défaut depuis toujours.

    • Modifié Castorix31 lundi 5 décembre 2016 15:07
    lundi 5 décembre 2016 15:07
  • Merci pour ces réponses.

    Effectivement, si jamais j'ai à faire ça en entreprise il vaut bien mieux utiliser Process.Start que les InteropServices, car d'autres développeurs C# seront plus à l'aise avec.

    Comme j'ai pas mal navigué avec les API Windows avec un autre langage avant, ça ne m'a pas posé intrinsèquement de problème de faire comme disait Google.

    En définitive, comme le dit Castorix31, dans les deux cas ça va appeler ShellExecute (ou ShellExecuteEx, qui peut gérer plus de paramètres), mais pas en passant par les mêmes bibliothèques.

    Voilà donc un point qu'il n'était pas inutile de me rappeler, maintenant je voudrais de mon côté rappeler que c'est la sécurité qui m'a incité à ouvrir le fil.

    J'ai tapé "CALC" dans un éditeur de texte, j'ai sélectionné ça, et j'ai lancé mon programme : ça a affiché "CALC", que j'ai validé, puis ça a ouvert la calculatrice.

    Ne serait-il pas plus judicieux de lancer une commande qui ne peut que ouvrir une URL ?

    Ou alors ajouter "http://" devant la sélection reçue est-il une bonne réponse ?

    Si je lance la commande "http://calc" on va me répondre que http n'est pas une commande interne ou un programme reconnu, ce qui ne sera pas une surprise, mais rien d'autre ne sera exécuté.

    En fait, sur le forum de sécurité j'ai demandé si le fait de pouvoir lancer un programme tiers avec mon programme que j'ai écrit pour ouvrir une URL pouvait être vu comme une faille de sécurité. C'est à ça qu'il a été répondu oui, et on m'a encouragé à chercher une autre syntaxe ...




    • Modifié Gloops lundi 5 décembre 2016 16:00 utile et inutile ce n'est pas tout-à-fait pareil ...
    lundi 5 décembre 2016 15:56
  • Il n'y a pas de problème de sécurité du moment où l'on sait ce que l'on lance.
    Par exemple Windows lui-même utilise ShellExecuteEx() lorsqu'on double-clique sur un fichier ou que l'on fait "Ouvrir avec"...
    • Marqué comme réponse Gloops lundi 5 décembre 2016 16:57
    lundi 5 décembre 2016 16:19
  • Bon, sur fr.comp.securite j'ai eu affaire à quelqu'un plus royaliste que le roi, alors ?

    Comme j'ai mis une demande de confirmation par MessageBox, du coup je peux répondre que oui on est supposé savoir ce qu'on lance. C'est peut-être pour ça que l'antivirus n'a pas réagi du coup.

    Bon, si je le diffuse je mets un petit couplet là-dessus, et on considère que c'est bon, donc.

    Merci tout le monde.

    lundi 5 décembre 2016 16:57