Kom ihåg mig?
Home Menu

Menu


Wrapper runt cgi?

Ämnesverktyg Visningsalternativ
Oläst 2011-09-20, 07:21 #1
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Standard Wrapper runt cgi?

Gomorron vänner,
skulle behöva köra ett cgi från en wrapper, som gör vissa checks och modifierar request parametrar, för att sedan skicka ut resultatet till klienten.

Istället för en request som ser ut så här:
http://example.com/cgi-bin/mincgi?re...quest_param2=y

Så vill jag att det ser ut så här:
http://example.com/cgiwrapper.php?re...quest_param2=y

cgiwrapper.php har följande pseudokod:
Citat:
<?php
//gör lite checks
if($_GET['request_param1'] == x){

//lägg till en tredje parameter
$_GET['request_param3'] = z;
}

//Kolla något helt annat , till exempel ingående ip:
if($_SERVER['REMOTE_ADDR'] == '1.2.3.4'){

//gör något

}

// kalla på mitt ursprungliga cgi och returnera resultatet till browsern:
// Här vet jag inte riktigt hur jag ska göra... kanske så här:

echo shell_exec('/usr/lib/cgi-bin/mincgi (ja, hur får jag in requesten $_GET här t ex?)');
Språk: PHP.

Alternativet är naturligtvis att göra ändringarna i cgi-n och kompilera om den, men jag är inte så bra på C.

Tack på förhand

Senast redigerad av Magnus_A den 2011-09-20 klockan 07:24 Anledning: Språk tillagt
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-09-20, 08:31 #2
hnn hnn är inte uppkopplad
Banned
 
Reg.datum: Mar 2004
Inlägg: 2 587
hnn hnn är inte uppkopplad
Banned
 
Reg.datum: Mar 2004
Inlägg: 2 587
Kod:
<?php

$vars = array();

//gör lite checks
if($_GET['request_param1'] == x)
{
    $vars['param1'] = $_GET['request_param1'];
//    lägg till en tredje parameter
//    $_GET['request_param3'] = z;
    $vars['request_param3'] = z;
}

//Kolla något helt annat , till exempel ingående ip:
if($_SERVER['REMOTE_ADDR'] == '1.2.3.4'){

//gör något

}

$param = '';
foreach($vars as $k => $v)
{
    $param .= ' --' . $k . '='. $v;
}

// kalla på mitt ursprungliga cgi och returnera resultatet till browsern:
// Här vet jag inte riktigt hur jag ska göra... kanske så här:

echo shell_exec('/usr/lib/cgi-bin/mincgi ' . $param);

Något sånt här?
hnn är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-09-20, 09:22 #3
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Citat:
Ursprungligen postat av hnn Visa inlägg
Kod:
<?php

$vars = array();

//gör lite checks
if($_GET['request_param1'] == x)
{
    $vars['param1'] = $_GET['request_param1'];
//    lägg till en tredje parameter
//    $_GET['request_param3'] = z;
    $vars['request_param3'] = z;
}

//Kolla något helt annat , till exempel ingående ip:
if($_SERVER['REMOTE_ADDR'] == '1.2.3.4'){

//gör något

}

$param = '';
foreach($vars as $k => $v)
{
    $param .= ' --' . $k . '='. $v;
}

// kalla på mitt ursprungliga cgi och returnera resultatet till browsern:
// Här vet jag inte riktigt hur jag ska göra... kanske så här:

echo shell_exec('/usr/lib/cgi-bin/mincgi ' . $param);

Något sånt här?
Tack!
Nu var det inte så enkelt för just detta CGI, som inte gillar att initieras annat än från en httpd-server.
Som tur tar cgi:t emot miljövariabler så jag får skriva ett litet bashscript som sätter miljövariabler så att det fungerar.

Först ett phpscript som kallar ett wrapper bashscript som körs som cgi.

Vet inte om jag krånglat till det men det fungerar i alla fall och jag slipper visa upp onödigt mycket variabler i den ursprungliga requesten.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-09-20, 09:26 #4
hnn hnn är inte uppkopplad
Banned
 
Reg.datum: Mar 2004
Inlägg: 2 587
hnn hnn är inte uppkopplad
Banned
 
Reg.datum: Mar 2004
Inlägg: 2 587
Ok.

Kan ju vara bra o veta.
hnn är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-09-20, 12:50 #5
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Citat:
Ursprungligen postat av hnn Visa inlägg
Ok.

Kan ju vara bra o veta.
Förstår, kom på det först i efterhand att den inte ville låta sig köras direkt från skalet.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-10-06, 22:41 #6
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Tänkte publicera lösningen här för alla som legat sömnlösa

Eftersom cgi:n inte vill låta sig kallas från skalet så skapade jag ett wrapper som gör checks, lägger till och drar ifrån, och sedan kallar på cgi:n med curl.
Sen skickar jag iväg resultatet genom att sätta en lämplig header, för png i detta fall, samt ekar ut curl-resultatets body.
På det viset kan jag öka säkerheten genom att bara tillåta anrop till cgi:n från localhost, om jag nu är rädd för säkerhetsbrister i cgi:n

Slutet gott, allting gott.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 17:00.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017