CGI脚本 - 如何创建弹出确认框?

时间:2017-08-22 12:01:28

标签: javascript perl cgi

我正在运行一个CGI脚本来阻止安全设备中的地址(使用wget命令),我想在加载过程中弹出一个确认框并询问是/否问题,如果答案是否--exit并且如果答案是肯定继续阻止该地址。有任何想法吗?

#!/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>";

1 个答案:

答案 0 :(得分:4)

这个问题显示了对HTTP交互如何工作的基本误解。 HTTP是无状态协议。客户端(可能是浏览器)发送请求,服务器发送响应。下一个请求/响应周期与前一个请求/响应周期没有任何关联,除非开发人员做了一些事情来存储有关状态的信息使用简单的CGI机制,您无法获得处理请求的中途,然后停止向用户询问更多信息。

通过编写Javascript并向Web服务器发出Ajax请求,您可能想要的是什么。但鉴于您对Web开发的了解程度,我强烈建议您聘请程序员或花一年左右的时间来完成此任务。

此外,您的CGI计划中还有一些奇怪的事情发生。

  • 您使用-w代替更现代的use warnings
  • 您没有use strict(因此,您不会声明任何变量)。
  • 您加载CGI模块两次。
  • 您拼错了:standard错误(但是您还没有使用任何标准功能)。
  • 您明确加载escapeHTML但从未使用它。
  • 你加载LWP :: Simple但是忽略它而不是炮轰wget
  • 根据您致电wget的结果,您什么都不做。
  • 您不必要地转义引号字符。