2017-08-22 3 views
-5

私はセキュリティデバイスのアドレスをブロックするためにCGIスクリプトを実行しています(wgetコマンドを使用しています)。読み込み中に確認ボックスがポップアップされ、yes/noの質問が表示されます。答えははいです。アドレスをブロックし続けます。何か案は?CGIスクリプト - 確認ボックスを作成するにはどうすればいいですか?

#!/usr/bin/perl -w 
use CGI qw(:standart escapeHTML); 
use CGI qw(:param); 
use LWP::Simple; 
$pass ='xxxxxx'; 
$rip = param('ip'); 
$addr=$ENV{'REMOTE_ADDR'}; 
print "Content-type: text/html \n\n"; 
print "<html>"; 
print "<head> <title>Block IP </title></head>"; 
print "<body>"; 

if($rip=~m/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) 
{ 
    system("wget \'https://x.x.x.x/policy/test? 
    deviceuser=user1&passd=$password&ip=$rip&policy=Quar_1D\' -O \/dev\/null --no- 
    check-certificate 2>&1 | grep response -A 3"); 
    print "<script type='text/javascript'>"; 
} 
else 
{ 
    if(!$rip) 
    { 
    print '<script type=\'text/javascript\'> 
    var gip=prompt(\'enter an ip to block\',\'\'); 
    if (!gip) { 
     window.location=\'http://x.x.x.x/cgi-bin/block.cgi\'; 
    } else { 
     window.location="http://x.x.x.x/cgi-bin/block_tp.cgi?ip="+gip; 
    }'; 
    } 
} 
print "</script></body></html>"; 
+0

Perlでは実際のポップアップや確認が必要ですか? –

+0

あなたはすでに、その醜いjavascriptの偽のフォームの事が起こっている - あなたもjavascriptの確認をしないでください? –

+0

例を送ることはできますか?ユーザーは、コンピューターのマウスを使用して「はい」または「いいえ」をクリックする必要があります。 – OmZ

答えて

4

この質問は、HTTPのやり取りの仕組みに関する基本的な誤解を示しています。 HTTPはステートレスプロトコルです。クライアント(おそらくブラウザー)が要求を送信し、サーバーが応答を送信します。開発者が状態に関する情報を格納する何かをしない限り、次の要求/応答サイクルは以前の要求/応答サイクルには接続していません。単純なCGIメカニズムを使用すると、要求の処理の途中で終わることができず、ユーザーに詳細な情報を要求することを止めることができます。

Javascriptを書いてWebサーバーにAjaxリクエストを送信することで、おそらく可能になります。しかし、Web開発の知識があれば、プログラマーを雇うか、1年かそこらで作業することを強くお勧めします。

さらに、あなたのCGIプログラムでは奇妙なことが起こることもあります。

  • use warningsの代わりに-wを使用します。
  • use strictはありません(したがって、変数は宣言していません)。
  • CGIモジュールを2回ロードします。
  • :standardのスペルは間違っていますが、とにかく標準機能は使用していません。
  • escapeHTMLを明示的に読み込みますが、決してそれを使用しないでください。
  • LWP :: Simpleを読み込みましたが、無視して代わりにwgetに砲撃してください。
  • wgetへの呼び出しの結果はまったくありません。
  • 不必要に引用符文字をエスケープします。
関連する問題