Masquer une variable du journal avec des traits de soulignement... Fonctionne presqueLors du récent sommet JMP, j'ai demandé aux développeurs comment masquer une variable contenant les informations d'identification d'une base de données. Ma solution actuelle est à 80% du chemin. Je définis les informations d'identification dans une variable dans un script chiffré, puis j'inclus () ce script et j'utilise la variable dans un script qui se connecte à la base de données. Quiconque ouvre le script principal peut voir les informations d'identification en accédant au fichier journal et en recherchant la variable. Les développeurs JSL étaient très demandés lors du Sommet et les autres personnes à qui j'ai parlé ne savaient pas comment cacher une variable.
Puis j'ai vu ça : Chiffrement et variables globales (jmp.com)
Si vous mettez simplement deux traits de soulignement avant une variable, cela les masquera... presque. Si vous essayez Show ( __myVar), Print ( __myVar) ou Write ( __myVar), le résultat sera vide. Super! Mais j'ai découvert que si vous tapez simplement __myVar directement dans le journal, celui-ci le définit pour vous. C'est en fait l'un des moyens les plus simples d'afficher la variable...
Cela ressemble à une faille involontaire. Le double trait de soulignement arrête toutes ces méthodes de script et si vous survolez le nom de la variable dans le script, le contenu n'apparaîtra pas. Mais il existe une manière très évidente d'afficher le contenu simplement en entrant directement la variable.
J'ai de bonnes raisons de ne pas vouloir chiffrer le script principal, uniquement la chaîne de connexion. Je ne sais pas s'il s'agit d'un article de la liste de souhaits ou s'il me manque quelque chose.
Automatisation et scriptsRe : Masquer une variable du journal avec des traits de soulignement... Fonctionne presqueSi vous regardez mon exposé "JMP et Oracle..." mentionné ci-dessus, voici ce que je fais :
- Créez une fonction chiffrée qui renvoie la connexion à la base de données.
Voici la fin de la fonction :
my_dbc = create database connection(dsn_string);
// Return the connection to Oracle
my_dbc;
Re : Masquer une variable du journal avec des traits de soulignement... Fonctionne presqueApparemment, vous pouvez également voir toutes les variables "cachées" dans le débogueur.

Re : Masquer une variable du journal avec des traits de soulignement... Fonctionne presqueMerci! Je pense que cela me mène à 99% du chemin. Cela résout bien le problème des variables. Le 1% est que je peux voir les informations d'identification lorsque la commande Include() est exécutée. Quiconque consulte le script peut voir quelque chose comme Include(db_credentials), exécuter cette ligne et consulter le fichier journal.
Pour moi, cela ressemble à ceci :
Include("DSN encrypted function.jsl");
//Log file shows:
//:*/
Include("DSN encrypted function.jsl");
/*:
Function( {},
{Default Local},
dsn_string = "DSN=myDSN;UID=" || "uname" || ";PWD=" || "pwd" || ";";
my_dbc = Create Database Connection( dsn_string );
my_dbc;
)Cela ne répond pas non plus à la partie de ma question concernant la technique des deux traits de soulignement. Pourquoi l'avoir si cela n'obscurcit que partiellement les variables ? Est-ce pour des raisons de sécurité ou dans un autre but ?
Re : Masquer une variable du journal avec des traits de soulignement... Fonctionne presqueEn fait, cela me mène à 100% du chemin. Il m'est venu à l'esprit que l'inclusion n'afficherait que la dernière chose qu'elle a faite dans le journal. J'ai ajouté un Print("This is the last thing") et maintenant je ne vois plus la définition de la fonction.
Merci!
Re : Masquer une variable du journal avec des traits de soulignement... Fonctionne presqueJe pense qu'il faut soit :
- créer une fonction cryptée pour effectuer la requête qui contient la chaîne de connexion à l'intérieur de la fonction (ne jamais la renvoyer)
- créer une fonction cryptée qui ouvre la connexion à la base de données (ne peut pas utiliser New SQL Query() si vous utilisez ceci qui est la méthode préférée dans JMP pour effectuer des requêtes de données )
- Utilisez quelque chose comme le gestionnaire d'informations d'identification Windows
Les scripts JMP intègrent des paramètres DSN ; pourquoi??
Comment gérer les informations de mot de passe utilisateur dans JSL (chaînes de connexion ODBC)
JMP et Oracle : Trucs et astuces pour un mariage heureux (2022-US-30MP-1093)
Re : Masquer une variable du journal avec des traits de soulignement... Fonctionne presqueJ'ai redéfini les variables sensibles comme Empty() après les avoir utilisées, donc même si quelqu'un obtient les noms des variables, elles ne contiendront aucune information.
Re: Masquer une variable dans le journal avec des tirets bas… Presque réussi</CODE></PRE>
<P>Excellente idée !<BR /> J'ai trouvé cette recommandation dans<BR /> <A href="https://www.jmp.com/support/help/en/19.0/?os=win&source=application#page/jmp/work-with-expressions-in-an-encrypted-script.shtml#" target="_blank" rel="noopener noreferrer">https://www.jmp.com/support/help/en/19.0/?os=win&source=application#page/jmp/work-with-expressions-in-an-encrypted-script.shtml#</A></P>
<PRE><CODE class=" language-jsl">

</CODE></PRE>
<P>En revanche, <A href="https://www.jmp.com/support/help/en/19.0/?os=win&source=application#page/jmp/encryption-and-global-variables.shtml" target="_blank" rel="noopener noreferrer">https://www.jmp.com/support/help/en/19.0/?os=win&source=application#page/jmp/encryption-and-global-variables.shtml</A> est davantage un avertissement qu'une stratégie :</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_1-1763829135582.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="hogi_1-1763829135582.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/87531iDDA2ACB34BC016E4/hogi_1-1763829135582.png" role="button" title="hogi_1-1763829135582.png" alt="hogi_1-1763829135582.png" /></span></SPAN></P>
<PRE><CODE class=" language-jsl">
</CODE></PRE>
<BR />
<PRE><CODE class=" language-jsl"><BR /><BR />Names default to here(1);
__Hello=1;
Show(__Hello);
Show(Char(__Hello));
new namespace("__Test");
__Test:Hello=1;
Show(__Test);
Show namespaces();
même chose pour le chiffrement :
//-e12.1
0,
344,4353eJwNzdmRhSAQAMB8NoWRc0AERu5DzT+Qff9d1QFHqsV6JkdVotYlkkDhRd03clZQQT4lY/V9by5qQPZ9+cMUryFddMeUzS/o
xBrLU9Be+4jFDalbz/jcKoH6mKax/aHIcsukQunhCmoHGbPI3PlbvwfT9ime6fmsTLNx7dCG3WexZhOfUzvj9U3itCUnjnbdv3yj
AaaaOb9Y+hhpa97cISVRJJVBVNCklH+vNc37BuxS3iv9QMQa4/lOEyo3hZ56pN5qBk8XfRSHcw3c5vwEgG20xmhAQ+w2zYhIk6+k
SDhYpzxVziJBoDwOpTSXHKXq2e3o1hnd+PsHyKdkiw==
,0,
Show(__Hello);
Show(Char(__Hello));
Show Namespaces()
... toujours avec accès à toutes les définitions.