"We are back" « oc.at

link auf php funktion direkt aus <a href>

aNtraXx 10.11.2003 - 15:09 1499 24
Posts

aNtraXx

trailer park king
Avatar
Registered: Apr 2002
Location: Linz
Posts: 6907
so.

also ich möchte gerne einen direkten link auf eine php funktion machen. Ohne dass ich ein switch dazwischen hänge also zb in der art:

Code: PHP
<a href="<?echo page.php?action=1?>">...</a>

sondern eher sowas

Code: PHP
<a href="<?echo $PHP_SELF."?php_funktion()"?>">...</a>

jedoch funktioniert letzteres nicht.

hätte da wer ne anständige lösung?

tia bernhard

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von aNtraXx
so.

also ich möchte gerne einen direkten link auf eine php funktion machen. Ohne dass ich ein switch dazwischen hänge also zb in der art:

Code: PHP
<a href="<?echo page.php?action=1?>">...</a>

sondern eher sowas

Code: PHP
<a href="<?echo $PHP_SELF."?php_funktion()"?>">...</a>

jedoch funktioniert letzteres nicht.

hätte da wer ne anständige lösung?

tia bernhard
das _kann_ auch nicht gehn, aber was sowohl sicher, als auch genauso in der anwendung wäre wäre folgendes:

x.php?call=a

$call = 'myfunction_'.$_GET['call'];
$call();

edit: die funktionen wären dann zb:
myfunction_a(), myfunction_b(), myfunction_fritz(),...

dadurch kann nicht ungewollt eine php-function aufgerufen werden auf die der benutzer keinen zugriff haben darf, man braucht nur nnoch eine abfrage davor, ob die function überhaupt existiert, sonst gibts nen error:

Code: PHP
$call = 'myfunction_'.$_GET['call'];
if(function_exists($call))
{
  $call();
}
Bearbeitet von watchout am 10.11.2003, 15:45

aNtraXx

trailer park king
Avatar
Registered: Apr 2002
Location: Linz
Posts: 6907
irgendwie geht das bei mir nicht...

Code: PHP
<?
$call = $_GET['call']; 
  if(function_exists($call)) 
    { 
	$call(); 
    }
?>

<a href="<?echo left.php?call=check_login ?>">
Login
</a>

im grunde ist es ja aber wieder fast genauso umständlich wie ein switch.


edit so jetzt gehts... :rolleyes:
Code: PHP
<a href="<?echo $PHP_SELF."?call=check_login" ?>">
Login
</a>

allerdings kann ich hier die variablen die ich in einen input schreibe nicht mitnehmen... so wie in einem form meine ich.
Bearbeitet von aNtraXx am 11.11.2003, 07:40

Maehmann

OC Addicted
Avatar
Registered: Aug 2002
Location: Vienna
Posts: 1110
warum nicht? ... dann steht sie halt im $_POST Array drin ...

aNtraXx

trailer park king
Avatar
Registered: Apr 2002
Location: Linz
Posts: 6907
hab ich auch shcon probiert. geht leider auch nicht

funka

Legend
ex-prophet(down below)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
oh mann bitte
mach zumindest einen check obs eine funktion ist die er machen darf wennst den usre schon remote coden laesst

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
antraxx, wie der funka schon angesprochen hat ist es kein zufall dass ich so ein langes prefix gewählt habe... für maximale sicherheit ist natürlich so etwas in der art notwendig:
Code: PHP
<?
$call = $_GET['call'];
$allowed = array('check-login','zweiteerlaubtefunc','dritte','usw');
if(function_exists($call) AND in_array($call,$allowed,TRUE))
{
  $call();
}
?> 
ausserdem werden weitere variablen so übergeben:
Code: PHP
<a href="<?=$_SERVER['PHP_SELF'] ?>?call=xxx&var1=val1&var2=val2">Clicky</a>




ps:und das:
<a href="<?echo left.php?call=check_login ?>">

ging nur deswegen nicht weil du quotes (") vergessen hast

aNtraXx

trailer park king
Avatar
Registered: Apr 2002
Location: Linz
Posts: 6907
das mit den quotes hab ich auch schon bemerkt. hat leider ned funktioniert...

naja ob ich das maxiumum an sicherheit brauche? oder OB ich es überhaupt brauche. ich will ja dann auch noch einen leserlichen code ;)

funka

Legend
ex-prophet(down below)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
Zitat von aNtraXx
naja ob ich das maxiumum an sicherheit brauche? oder OB ich es überhaupt brauche. ich will ja dann auch noch einen leserlichen code ;)
oh mann was ist daran unleserlich was dir watch gepostet hat

unueberpruefte php funktion uebergeben lassen und dann noch extra deren parameter ...

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4477
Zitat von aNtraXx
das mit den quotes hab ich auch schon bemerkt. hat leider ned funktioniert...

naja ob ich das maxiumum an sicherheit brauche? oder OB ich es überhaupt brauche. ich will ja dann auch noch einen leserlichen code ;)

Die Frage stellst du dir spaetestens dann wieder wenn dir jemand reingepfuscht hat und z.b. Befehle wie 'exec("rm -Rf /");' ausfuehrt.

Unueberpruefte Benutzer-Eingabe (und das ist eben nicht nur an Formulare gebunden, sondern jegliche Art von Information die man in seiner Applikation von extern entgegen nimmt) ist in 99% der Faelle Ursache wenn etwas Boeses[tm] passiert.

aNtraXx

trailer park king
Avatar
Registered: Apr 2002
Location: Linz
Posts: 6907
wtf... der kann dan echt über ein inputformular mit sochen befehlen rumpfuschen?

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Natürlich.

Such mal nach SQL Injection, da findet man haufenweise Material drüber, ist ziemlich ähnlich. Damit kann man die komplette Datenbank ruinieren.

vossi

been there, done that
Avatar
Registered: Feb 2003
Location: Vienna
Posts: 1436
2 kleine Tipps meinerseits

1) http://www.php.net/eval
2) die einfachste möglichkeit Forms zu verändern ist deine Form in ein Frame zu laden und per JavaScript die Frame Inhalte deiner Form zu ändern bzw. gleich die ganze Form von Hand verschicken .. hat mal n Freund von mir bei meinem GBook gemacht :) (kleine Gehversuche als Möchtegern Hacker :p )

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
ad 1: eval? :cordless: wenn du eval verwendest brauchst dir um mysql-injection tatsächlich keine gedanken mehr machen...
ad 2: es wird immer lustiger... :rolleyes:

vossi

been there, done that
Avatar
Registered: Feb 2003
Location: Vienna
Posts: 1436
ey was soll der kak mist? ich mach kebap aus dir!

eval kannst auch so benutzen .. wennst du drüber abhaust dann erklär mir auch gleich wieso ..

und zum zweiten teil .. was war daran so lustig?

erklär mir des bitte dann kann ich in ruhe und frieden sterben gehn ... :rolleyes:
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz