Hallo,
ich frage mich seit einiger Zeit, ob meine Scripte sicher gegen die gänigen Anriffsmethoden wie SQL-Inject und irgend einer Form von ungewollter inclusion sicher sind.
SQL-Injects begegne ich bei strings mit mysql_real_escape_string() und bei ints mit intval(). reicht das?
Außerdem benutz ich sehr oft die get Variable 'id'. Da ich von Hausaus nunmal Faul bin, dachte ich mir, anstatt sie jedesmal zu Intvallen, prüfe ich sie einfach beim Start:
if(isset($_GET['id']) && !is_numeric($_GET['id'])) unset($_GET['id']);
Ob das nun schön ist oder nicht ist ansichts Sache, aber sehr ihr darin ein Problem? Irgendeine möglichkeit, da irgendwie in die SQL-Abfrage einzugreifen?
Dann wegen ungewollter inclusion, hier mein Code:
/**
* handle http request
*
*/
private function handleRequest() {
if(isset($_GET['p'])) {
$type = 'page';
$name = $_GET['p'];
}elseif(isset($_GET['s'])) {
$type = 'setting';
$name = $_GET['s'];
} elseif(isset($_GET['f'])) {
$type = 'form';
$name = $_GET['f'];
} else {
$type = 'page';
$name = 'index';
}
$name = ucfirst(strtolower($name)).ucfirst($type);
$this->loadModule($type, $name);
$this->execModule($name);
}
/**
* load a module
*
* @param string $type type of module
* @param string $module module name
*/
private function loadModule($type, $module) {
if(preg_match('/^[a-zA-Z0-9]+$/', $module) && file_exists(MODULES_ROOT.'/'.$type.'/'.$module.'.class.php')
require(MODULES_ROOT.'/'.$type.'/'.$module.'.class.php';
else throw new Exception('Requested module not found: '.$type.' - '.$module);
}
/**
* exec module
*
* @param string $module module name
*/
private function execModule($module) {
if(class_exists($module)) {
try {
$m = new $module();
$m->execToTemplate();
} catch(PermissionDenitedException $e) {
self::getTemplate()->addVariable('content', new template('PermissionDenitedException.htm');
}
} else throw new Exception('Class '.$module.' not found!';
}
Mit preg_match('/^[a-zA-Z0-9]+$/', $module) will ich erreichen, dass nur Buchstaben und Zahlen als Modulname angegeben werden können. Reicht das?
Verbesserungsvorschläge?