使用下划线从日志中隐藏变量... 几乎可以工作在最近的 JMP 峰会上,我向开发人员询问如何隐藏包含数据库凭据的变量。 我目前的解决方案已经完成了 80%。 我在加密脚本的变量中设置凭据,然后 Include() 该脚本并在连接到数据库的脚本中使用该变量。 任何打开主脚本的人都可以通过转到日志文件并查找变量来查看凭据。 JSL 开发人员在峰会上很受欢迎,而我采访过的其他人则不确定如何隐藏变量。
然后我看到了这个:加密和全局变量 (jmp.com)
如果你只是在变量前添加两个下划线,它就会隐藏它们......几乎。 如果尝试显示 (__myVar)、打印 (__myVar) 或写入 (__myVar),结果将为空白。 伟大的! 但后来我发现如果你直接在日志中输入 __myVar ,日志就会为你定义它。 这实际上是显示变量的最简单方法之一......
看起来像是一个无意的漏洞。 双下划线会停止所有这些脚本方法,如果将鼠标悬停在脚本中的变量名称上,它将不会显示内容。 但是有一种非常明显的方法可以通过直接输入变量来显示内容。
我有充分的理由不想加密主脚本,而只想加密连接字符串。 不确定这是否是愿望清单项目或者我是否遗漏了某些东西。
自动化和脚本编写回复:用下划线从日志中隐藏变量...... 几乎可以工作如果你看看我上面提到的“JMP 和 Oracle ...”演讲,这就是我所做的:
这是函数的尾部:
my_dbc = create database connection(dsn_string);
// Return the connection to Oracle
my_dbc;
回复:用下划线从日志中隐藏变量...... 几乎可以工作显然,您还可以在调试器中看到所有“隐藏”变量。

回复:用下划线从日志中隐藏变量...... 几乎可以工作谢谢你! 我想这让我成功了 99%。 它很好地解决了变量问题。 1% 是我可以在运行 Include() 命令时看到凭据。 任何查看该脚本的人都可以看到类似 Include(db_credentials) 的内容,运行该行并查看日志文件。
对我来说,它看起来像这样:
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;
)它也没有解决我关于两个下划线技术的问题部分。 如果它只能部分地掩盖变量,为什么还要有它呢? 是为了安全还是其他目的?
回复:用下划线从日志中隐藏变量...... 几乎可以工作事实上,它让我 100% 成功。 我想到 Include 只会显示它在日志中所做的最后一件事。 我添加了一个 Print("这是最后一件事"),现在我看不到函数定义。
谢谢!
回复:用下划线从日志中隐藏变量...... 几乎可以工作我认为你必须:
- 创建加密函数来执行包含函数内部连接字符串的查询(从不返回这些)
- 创建加密函数打开数据库连接(如果您使用此连接,则无法使用 New SQL Query()这是 JMP 中执行数据查询的首选方法)
- 使用 Windows 凭据管理器之类的东西
JMP脚本嵌入DSN参数;为什么??
如何在 JSL 中处理用户密码信息(ODBC 连接字符串)
JMP 和 Oracle:幸福婚姻的提示和技巧 (2022-US-30MP-1093)
回复:用下划线从日志中隐藏变量...... 几乎可以工作在使用敏感变量后,我一直将其重新定义为 Empty(),因此,即使有人获得了变量名称,它们也不会包含任何信息。
回复:用下划线隐藏日志中的变量……几乎有效</CODE></PRE>
<P>好主意!<BR />我在……中找到了这条建议<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>另一方面, <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=</A> win&source=application#page/jmp/encryption-and-global-variables.shtml 更像是一个警告,而不是一种策略:</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();
加密也是如此:
//-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()
……仍然可以访问所有定义。