/** ********************************************************************** * ASTALAVISTA Webapp Intrusion Detection/Response System * * @copyright ASTALAVISTA SECURE CMS - 2003 Astalavista Group GmbH * @author Ivan Schmid <*****@*****.**> * @version 1.2 26.03.03 * @module core ********************************************************************** / ********************************************************************** * Astalavista Web Intrusion Detection System (common filter) * * @param array untrusted array gpcs (GET/POST/SERVER/COOKIES/usw) * @return string attack type * @return string file * @return string line * @version 1.2 26.03.03 * @module core ********************************************************************** */ function securityIDS($array = array()) { global $excludeFromIDS; if (count($array)) { foreach ($array as $key => $untrustedValue) { $exclude = false; for ($i = 0; $i < count($excludeFromIDS); $i++) { if (stristr($key, $excludeFromIDS[$i])) { $exclude = true; } //echo "$key = $untrustedValue <br>"; } if (!$exclude) { if (is_array($untrustedValue)) { $trustedValue[$key] = securityIDS($array[$key]); } else { $attackType = "Unknown Web Attack"; $attack = 0; if (eregi("<[^>]*script*\"?[^>]*>", $untrustedValue) || eregi("<[^>]*xml*\"?[^>]*>", $untrustedValue) || eregi("<[^>]*style*\"?[^>]*>", $untrustedValue) || eregi("<[^>]*form*\"?[^>]*>", $untrustedValue) || eregi("<[^>]*window.*\"?[^>]*>", $untrustedValue) || eregi("<[^>]*alert*\"?[^>]*>", $untrustedValue) || eregi("<[^>]*img*\"?[^>]*>", $untrustedValue) || eregi("<[^>]*document.*\"?[^>]*>", $untrustedValue) || eregi("<[^>]*cookie*\"?[^>]*>", $untrustedValue) || eregi(".*[[:space:]](or|and)[[:space:]].*(=|like).*", $untrustedValue) || eregi("<[^>]*object*\"?[^>]*>", $untrustedValue) || eregi("<[^>]*iframe*\"?[^>]*>", $untrustedValue) || eregi("<[^>]*applet*\"?[^>]*>", $untrustedValue) || eregi("<[^>]*meta*\"?[^>]*>", $untrustedValue)) { $attack = 1; $attackType = "Potential Cross-Site-Scripting Attack"; } if (preg_match("/;/", $untrustedValue) || preg_match("/'/", $untrustedValue)) { $attack = 1; $attackType = "Potential SQL Injection Attack"; } if ($attack == 1) { if (!get_magic_quotes_runtime()) { $trustedValue[$key] = htmlspecialchars($untrustedValue, ENT_QUOTES); } } else { $trustedValue[$key] = $untrustedValue; } } } else { $trustedValue[$key] = $untrustedValue; } } } return $trustedValue; }
$excludeFromIDS = array ( "pgn_text_CONTENT", "pgn_cal_appointment_DESCRIPTION", "htxt_", "phpedit" ); // running intrusion detection if (is_array($_GET)) $_GET = securityIDS($_GET); if (is_array($_POST)) $_POST = securityIDS($_POST); if (is_array($_COOKIE)) $_COOKIE = securityIDS($_COOKIE); //if (is_array($_SERVER)) $_SERVER = securityIDS($_SERVER); //if (is_array($_ENV)) $_SERVER = securityIDS($_ENV); // setting version $nx_version = "4.5.0.220"; // Global variables // database related $recordsets = null; $insertstatements = null; $updatestatements = null; $deletestatements = null; $rawstatements = null; $oids = null;