使用底線從日誌中隱藏變數... 幾乎可以工作在最近的 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()
……仍然可以存取所有定義。