IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

protection script par date


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut protection script par date
    Bonjour à toutes et tous,

    Je voudrais autoriser l'exécution d'un script en fonction de la date.

    passer en ligne de commande: testsecu.exe touffic

    et que le script se lance si le mot de passe touffic est bien supérieur a la date actuelle

    j'avais prévu d'écrire ce bout de code mais bien évidement il ne fonctionne pas

    Sauriez vous me dire ce que j'ai mal fait SVP ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    from datetime import datetime
    import sys
    for arg in sys.argv:
        print(arg)
        match arg:
            case "touffic":
                touffic = datetime(2023, 7, 31)
                verif = touffic.date()
            case "le":
                le = datetime(2023, 8, 31)
                verif = le.date()
            case "magnific":
                magnific = datetime(2023, 9, 30)
                verif = magnific.date()
     
        if datetime.today().date() > verif:
            print('votre licence a expiré')
            print('merci de nous contacter')
            sys.exit()
     
    print('on peut continuer le script normalement')

  2. #2
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    d'ailleurs

    PS F:\0_Code> & ........................................1/python.exe f:/0_code/testsecu.py magnific
    f:/0_code/testsecu.py
    magnific
    PS F:\0_Code>

    il prend bien l'argument passé et me le printe

    mais il ne me printe ni le problème de date antérieure, ni le fait que j'ai une date supérieure

    comme si il ne rentrait pas dans le "match case"

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par figuedi Voir le message
    et que le script se lance si le mot de passe touffic est bien supérieur a la date actuelle
    mouais.... il faudrait déjà que la chaine de caractère ait le format d'une date pouvant être convertie avec datetime.strftime pour pouvoir le comparer. Est ce que vous pensez vraiement que "touffic" ressemble a une date?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Ben non touffic n'est pas une date

    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dt = datetime(2023, 10, 1)
    d = dt.date()
    if d < datetime.today().date():
       sys.exit()
    mais ce code fonctionne
    avec juste dt = touffic et d = verif
    apres le nom des variables importe peu non ?

  5. #5
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import sys
    from datetime import datetime
    for arg in sys.argv:
        print(arg)
        match arg:
            case 'touffic':
                print('tu as rentré', arg)
                touffic = datetime(2023, 12, 1)
                verif = touffic.date()
                print(verif)
            case _:
                print("tu n'as pas rentré Touffic")
     
    print('on peut continuer le script normalement')
    donne bien comme résultat
    f:/0_Code/testSecu.py touffic
    f:/0_Code/testSecu.py
    tu n'as pas rentré Touffic
    touffic
    tu as rentré touffic
    2023-12-01
    on peut continuer le script normalement
    PS F:\0_Code>

    Donc ça marche bien malgré que touffic ne soit pas uen date

    me reste plus qu'à reprendre le script du haut pour voir ou j'avais fait l'erreur

  6. #6
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Je crois avoir compris

    D'apres ce que j'ai lu :

    argv se décompose
    argv[0] => nom du script
    argv[1] => premier argument
    ...
    ...
    comme dans mon script d'origine je n'avais pas prévu le cas ou on ne rentrait rien forcément il sortait du soft sans rien faire car 'testsecu.py' qui est argv[0] ne satisfaisait aucune condition.

  7. #7
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ce n'est pas le code que tu nous montres qui produit ce résultat.

    Le premier arg est le nom de script ("f:/0_code/testsecu.py"), donc le case/match ne créera jamais la référence verif ce qui lèvera une NameError.

    Une fois ce problème contourné, ton code fonctionne très bien.

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par figuedi Voir le message
    Donc ça marche bien malgré que touffic ne soit pas uen date
    ça dépend de ce qu'on veut mais au départ vous avez écrit: "Je voudrais autoriser l'exécution d'un script en fonction de la date."
    Là on se retrouve avec un script qui dépend d'une chaine de caractères... qui n'a rien à voir avec une date et qui affiche la date en guise de bienvenue.
    Pourquoi pas, juste qu'il faut savoir ce qu'on veut.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Ce n'est pas le code que tu nous montres qui produit ce résultat.

    Le premier arg est le nom de script ("f:/0_code/testsecu.py"), donc le case/match ne créera jamais la référence verif ce qui lèvera une NameError.

    Une fois ce problème contourné, ton code fonctionne très bien.
    oui merci c'est que j'ai vu

    Citation Envoyé par wiztricks Voir le message
    ça dépend de ce qu'on veut mais au départ vous avez écrit: "Je voudrais autoriser l'exécution d'un script en fonction de la date."
    Là on se retrouve avec un script qui dépend d'une chaine de caractères... qui n'a rien à voir avec une date et qui affiche la date en guise de bienvenue.
    Pourquoi pas, juste qu'il faut savoir ce qu'on veut.

    - W
    Certes je n'ai pas été trop précis dans mon message mais en effet le but est de donner l'acces au soft pendant un temps donné, donc si je lui donne le mot de passe taratata il aura droit de l'utiliser jusqu'en Aout 2024 par exemple donc je bloque bien le logiciel en fonction de la date. Mais en effet c'était bien une simplification de langage.

    désolé

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Si c'est le cas, la vérification de la date peut se faire après.
    De plus, fabriquer un datetime pour en sortir une date alors qu'on peut fabriquer une date directement et date.today() pour récupérer le jour courant n'est pas mal non plus.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Je pense que tu ne m'as pas compris ou peut être plus vraisemblablement je ne te comprends pas

    Mon code fonctionne et fait ce que je veux.

    à savoir lancer mon fichier en ligne de commande lambda.exe mot_de_passe
    vérifier qu'il y ait bien un mot de passe de rentré
    vérifier que le mot de passe lui donne bien encore accès au logiciel

    Ci dessous le code et le résultat. Si tu as une meilleure solution n'hésites pas à m'en faire part,
    car je me di qu'un simple detricotage du .exe doit etre facile à faire et donc trouver la phrase magique encore plus
    et j'imagine aussi qu'il va falloir utiliser des mots de passe à 20 caractères avec des caractères spéciaux des majuscules et des minuscules.

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    import sys
    from datetime import datetime
     
    if len(sys.argv) > 1:
        match sys.argv[1]:
            case 'mot_1':
                dt = datetime(2023, 9, 30)
                verif = dt.date()
            case 'mot_2':
                dt = datetime(2023, 10, 31)
                verif = dt.date()
            case 'mot_3':
                dt = datetime(2023, 11, 30)
                verif = dt.date()
            case 'mot_4':
                dt = datetime(2023, 12, 31)
                verif = dt.date()
            case 'phrase_magique':
                dt = datetime(2024, 12, 31)
                verif = dt.date()
            case _:
                dt = datetime(1912, 1, 1)
                verif = dt.date()
        if verif < datetime.today().date():
            print('''Le mot de passe rentré n'est pas le bon,
    merci de me contacter pour que je vous en génère un de nouveau''')
            sys.exit()
    else:
        print('''!!! Mauvaise utilisation de la commande !!!
    merci de taper lambda suivi d'un espace et du mot_de_passe
    par exemple : lambda toto''')
        sys.exit()
     
    print('on peut continuer le script normalement')
    Le résultat est ici:

    F:\>lambda toto
    Le mot de passe rentré n'est pas le bon,
    merci de me contacter pour que je vous en génère un de nouveau

    F:\>lambda
    !!! Mauvaise utilisation de la commande !!!
    merci de taper lambda suivi d'un espace et du mot_de_passe
    par exemple : lambda toto

    F:\>lambda phrase_magique
    on peut continuer le script normalement

    F:\>

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par figuedi Voir le message
    Ci dessous le code et le résultat. Si tu as une meilleure solution n'hésites pas à m'en faire part
    Je dis qu'on peut remplacer les:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
           case 'mot_1':
                dt = datetime(2023, 9, 30)
                verif = dt.date()
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           case 'mot_1':
                verif = dt.date((2023, 9, 30)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       if verif < datetime.today().date():
               ...
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       if verif < date.today():
               ...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    merci donc oui j'avais rien compris.

    Merci

  14. #14
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    donc sans le dt. qui ne sert a rien à part me générer une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import sys
    from datetime import date
     
    if len(sys.argv) > 1:
        match sys.argv[1]:
            case 'mot_1':
                verif = date(2023, 9, 30)  
            case _:
                verif = date(1912, 1, 1)
        if verif < date.today().date():
    un grans merci à toi

  15. #15
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    date.today() est déjà une date.
    Inutile d'y appliquer la méthode date().

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    yep autant pour moi

    merci

  17. #17
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par figuedi Voir le message
    Si tu as une meilleure solution n'hésites pas à m'en faire part,
    Oui. Parce que tester en dur "si mot de passe = toufic" ça reste ridiculement bas comme sécurité. Même sur un exe suffit d'en extraire les strings et le mot de passe tombe en 3 secondes.
    Le minimum c'est une sécurité de type "hash". Tu hashes le mot de passe entré et si le résultat correspond au hash stocké alors le mot de passe est correct. Et si le hash se trouve hors du programme (ie un fichier placé à coté) c'est encore mieux (cela permet à l'utilisateur de changer son mot de passe sans toucher à l'exe).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo