2015-10-01 54 views
1

即使我們在瀏覽器地址欄中傳遞URL,我也有幾個Perl腳本被執行。我只是想停止這種行爲。我想要的是當用戶點擊按鈕或鏈接上的腳本附加,然後只有他們應該得到執行。如何讓Perl腳本只在用戶點擊鏈接/按鈕等時執行

www.example.com/cgi-bin/abc.cgi --- Should not work. 

<button on-click="/cgi-bin/abc.cgi"> Execute me </button> -- it should work 

如何做到這一點?

+5

您基本上希望應用程序服務器決定是否調用腳本。祝你好運。 –

+3

這種氣味可疑地像X-Y問題(https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)你實際上試圖通過阻止用戶手動輸入URL來完成什麼? –

+1

那麼當在地址欄中輸入URL時會發生什麼? –

回答

4

你可以這樣做,有兩種方法可以解決它。 一,當按鈕被點擊,你可以使用POST方法提交表單,代碼只應執行當腳本使用POST方法調用,如:

HTML:

<form method="POST" action="/cgi-bin/abc.cgi"><input type="submit" name="submit_button" value="Execute me"><form> 

的Perl代碼:

if($ENV{REQUEST_METHOD} eq 'POST') { 
    ## execute special code 
} 

兩個,你可以檢查查詢字符串的參數:

HTML:

<input type="button" value="Execute me" onClick="window.location.href='/cgi-bin/abc.cgi?doExecute=1';"> 

的Perl:

use CGI; 

my $cgi = new CGI; 

if(defined $cgi->param('doExecute') && $cgi->param('doExecute')) { 
    ## execute special code 
} 

我希望這有助於。

+4

請注意,第二個建議很容易被用戶在地址欄中輸入參數和URL一起挫敗。 –

+1

你也可以給'

+0

可以結合(1)和(2)。然後閱讀幾個從CLI中模擬POST的程序。 –

相關問題