phpbar.de logo

Mailinglisten-Archive

[php] (OT) php Anwendung auf Sicherheit prüfen

[php] (OT) php Anwendung auf Sicherheit prüfen

Mark-Walter at t-online.de Mark-Walter at t-online.de
Don Okt 14 21:05:56 CEST 2004


Hallo Ron Opitz,

> Ich denke da an Stichwörter wie
> - cross-site-scripting

Uebergeneben Werte vom Browser werden wieder dargestellt,
und damit sind Ausfuehrungen ueber ein Tag moeglich z.B.
Javascript.

Der Server erwertet eine normale textuelle oder numerische
Eingabe und der User antwortet mit Javascript.

Die Funktion strip_tags entfernt Tags und bereinigt sie.

> - session-manipulation

Am Besten open_basedir und session.save_path fuer jede Domain 
setzen.

> - url-modifikation

In dem Fall register_globals ist aktiviert werden die
per URL uebergebenen Parameter innerhalb des PHP 
Skriptes uebernommen.

www.openfile.org/fopen.php?id=/etc/passwd

Benutzt fopen.php einen Leseprozess und uebernimmt den
fuer id verwendeten Parameter koennen systemweit ueber
Webserverberechtigungen Auswertungen vorgenommen werden.

Andere Fall eher wahrscheinlich:

$USER = $_GET['username'];
$PASS = $_GET['passwd'];

if (isset($USER) == "developer" && isset($PASS) == "x$3&h/§G") {
   $log_auth = 1;
}

if ($log_auto == 1) {
   echo "Your authenticated";
}

www.openfile.org/login.php?log_auto=1

Wuerde ohne eine Berechtigungspruefung Zugang gewaehren. Also
am Besten $log_auth = 0, am Amfang vor der Ueberpruefung setzen
oder anders coden:

if (isset($USER) == "developer" && isset($PASS) == "x$3&h/§G") {
   start_session();
   $_SESSION['SESS_CUS'] = $user_id;
}

> - Prüfung von <form>-Daten

Ja wie gesagt Tags sollte man entfernen, in dem Fall die Daten
werden wieder ueber den Browser ausgegeben.

addslashes wandelt single quote ('), double quote ("), backslash (\) and NUL
(the NULL byte) um.

Das ist wichtig in dem Fall die Formularuebergabe wird in einem
SQL-Query z.B. bei Page-Sliding ueber limit benutzt. 
Hier entseht SQL Injection. 

Aus der php.net Docu eine Funktion:

function quote_smart($value)
{
   // Stripslashes
   if (get_magic_quotes_gpc()) {
      $value = stripslashes($value);
   }
   // Quote if not integer
   if (!is_numeric($value)) {
      $value = "'" .
      mysql_real_escape_string($value) . "'";
   }
   return $value;
}

quote_meta ist auch noch wichtig und kann ohne PHP beinflussen.

Hoffe ich konnte dir weiterhelfen :-)

-- 
Best Regards,

Mark

php::bar PHP Wiki   -   Listenarchive