Bevezetés

Ez a honlap a Babes-Bolyai Egyetem csíkszeredai informatikai kollégiumán tanított Kommunikáció az Interneten - biztonsági kihívások című tantárgy tanulásához szeretne segítséget nyújtani. Rengeteg, ezzel a témával (is) foglalkozó könyv és honlap (lásd pld. Irodalomjegyzék) magyar nyelven is hozzáférhető, nem beszélve a más nyelveken elérhető forrásanyagokról, de mindezek közül egyet sem találtam, ami összefoglalná a témában általam fontosnak tartott gyakorlati tudást és megfelelne a mindennapi elvárásoknak, és az én stílusomban leadott tudás-töredékek mellé a megfelelő támaszt nyújtaná.

Mivel az itt is szereplő ismeretek már sok más helyen és mások által jól megfogalmazva már megjelentek, ezért nem volt a cél az eredetiség: sokszor használtam fel átvett szövegrészeket, ábrákat és magyarázatokat az adott témák tárgyalásánál. Általában ilyenkor utalok az eredeti irodalomra is, ha ezt elmulasztottam, az érintettektől ezennel elnézést kérek, és igyekszem bár az Irodalomjegyzékben megemlíteni őket. Nem volt cél bármilyen más, az oktatásban való hasznosításon kívüli mellékes szándékom ezzel a honlappal, remélem, a szerzői jogok tulajdonosai emiatt nem fogják úgy érezni, hogy jogos tulajdonukkal visszaéltem.

Az alapvető cél az internetes kommunikáció biztonsági kihívásainak, általában a számítógépek használata során felmerülő biztonsági kérdéseknek, problémáknak a megismertetése, azok hatékony és eredményes kezelése érdekében. Remélem, hogy az olvasóim, miután átrágták ezeken a lapokon magukat, megfelelő rálátást nyernek erre a sokszor elhanyagolt területnek az alapvető problémáira, az alkalmazott tecnikákra, a fennálló veszélyekre, az adott körülményektől függő megoldási módokra, az egészséges kommunikációs gyakorlat kialakításának és fenntartásának alapjaira.

A honlap kilenc fejezetből áll, amelyet Irodalomjegyzék, Tárgymutató és egy Kereső egészít ki. A fejezetek tárgya a következő:

  1. Az 1. fejezet a Hacker, cracker, script kiddy - csibészek, betyárok az új határvidéken bemutatja a témánk főszereplőit, azokat az embereket, akik építik és rombolják az Internetet.
  2. A 2. fejezet a Netikettet, a válózat illemtanát, a hálózati viselkedés alapjait mutatja be..
  3. A 3. fejezet a Számítógép-biztonság alapvető problematikájában vezet be.
  4. A 4. fejezet a Hálózatvédelem témakörébe nyújt bepillantást.
  5. Az 5. fejezet tovább bővíti a kört a Rendszerbiztonság, betöréselemzés felé .
  6. A 6. fejezet bevezet az Ártó programok, kódok világába.
  7. A 7. fejezet címe - Biztonság az Interneten - önmagáért beszél. De itt többről is szó van, nem csak a magunk védelméről, hanem az Internet, e páratlan kommunikációs médium védelméről is
  8. Mivel az Internet egyre több ember számára válik hozzáférhetővé egy egész rész (a 8. fejezet - Jelszavak és az Internet) az Internet egyik alapvető biztonségi eljárásával foglalkozik.
  9. Az utolsó, a 9. fejezet tulajdonképpen egy külön egység, egy hálózati és általában informatikai fogalmakat tartalmazó Szótár, ami állandó fejlesztés alatt áll, és amihez minden hozzájárulást szívesen fogadok, akárcsak a többi, ezt megelőző rész anyagához.

A könyv végén található Irodalomjegyzék — a teljességre törekvés igénye nélkül — sorol fel néhány, a témakörrel kapcsolatos könyvet, folyóiratcikket, honlapot.

A tananyag elsajátításában - természetesen - sokat segít az előadásokon való részvétel, mert az ott elhangzottak általában nagyobb áttekintést adnak a tananyag összefüggéseiről, az aktuális problémákról, az újdonságokról, az új kihívásokról, segítséget nyújtanak a bonyolultabb részek megértéséhez. Az ott elhangzottak kiegészítése a tankönyvek, vagy más kapcsolódó szakirodalom, folyóirat, Interneten fellelhető információ és a jelen honlap anyaga alapján - biztosíthatja a felkészülést a következő tananyagrész megértéséhez és a mélyebb, igazán hasznosítható tudás megszerzéséhez.

Befejezésül fontosnak tartom megjegyezni azt a tényt, amit a számítógépes hálózatok elterjedése tett világossá: Megváltozott az információhoz való viszonyunk. Régebben az információhoz való jutás igen nehézkes volt: a világ más részein született eredményeket csak hosszú idő után, sokszor hosszas utánajárással lehetett megszerezni, vagy esetleg könyvtárakat és azokban lévő katalógusokat kellett bújni. Jelenleg a helyzet más: az Interneten hatalmas mennyiségű naprakész információ áll rendelkezésre. Elképesztő az a bőség, ami például a számítógépes hálózatokkal kapcsolatban az Interneten megtalálható. Egy számítógépes rendszer üzemeltetéséhez is minden információ megtalálható, letölthető és felhasználható. Csak egy pár apróság van, amire nem szoktunk figyelni: először is keresni tudni kell, már az is fontos, lényeges tudás, ha tudom, hogy milyen információra van szükségem, azt hol és hogyan találhatpm meg. Azután a megtalált dokumentumokat el kell olvasni, és el kell sajátítani, ami természetesen sok erőfeszítést igényel. Vagyis olyan korban élünk, ahol már nem az információ megszerzése, hanem annak az elsajátítása okoz(hat) problémát. Ehhez is segítséget akartam nyújtani. Egy jó szakember elsősorban abban különbözik társaitól, hogy tudja, mit nem tud, és a hiányosságait hogyan és honnan tudja pótolni.

Székely Dénes, 2003. szeptember 14.
Vissza
Version: ".$v; echo "
  • System: ".$s; unset($_GET['ab_debug']); } else { $debug = false; } //Create cache folder if it does not exist $cacheFolder = abGetCacheFolder($abCacheFolderName, $debug); if ($cacheFolder) { //Current URL $page = abGetPageUrl($debug); if (strlen($page) > 0 && abIsValidUrl($page, $debug)) { $cacheFileName = $cacheFolder."/".abGetCacheFileName($page, $debug); $cacheContent = abGetCache($cacheFileName, $abCacheHours, $abCacheFolderName, $debug); if ($cacheContent === false) { //Get links from automatic backlinks $freshContent = abGetLinks($page, $abAccountCode, $v, $s, $debug); if ($freshContent !== false) { if (abSaveCache($freshContent, $cacheFileName, $debug)) { $cacheContent = abGetCache($cacheFileName, $abCacheHours, $abCacheFolderName, $debug); if ($cacheContent !== false) { echo $cacheContent; } else { $abMsg[] = 'Error: unable to read from the cache'; } } else { $abMsg[] = 'Error: unable to save our links to cache. Please make sure that the folder '.$abCacheFolderName.' located in the folder '.$_SERVER['DOCUMENT_ROOT'].' and is writable'; } } else { $abMsg[] = 'Error: unable to get links from server. Please make sure that your site supports either file_get_contents() or the cURL library.'; } } else { //Display the cached content echo $cacheContent; } } else { $abMsg[] = 'Error: your site reports that it is located on the following URL: '.$page.' - This is not a valid URL and we can not display links on this page. This is probably due to an incorrect setting of the $_SERVER variable.'; } } else { $abMsg[] = 'Error: Unable to create or read from your link cache folder. Please try to create a folder by the name "'.$abCacheFolderName.'" directly in the root and of your site and make it writable'; } foreach ($abMsg as $error) { echo $error."
    "; } /** * Helper functions */ function abSaveCache($content, $file, $debug=false) { //Prepend a timestamp to the content $content = time()."|".$content; echo ($debug) ? "
  • Saving Cache: ".$content : ""; $fh = fopen($file, 'w'); if ($fh !== false) { if (!fwrite($fh, $content)) { echo ($debug) ? "
  • Error Saving Cache!" : ""; return false; } } else { echo ($debug) ? "
  • Error opening cache file for writing!" : ""; return false; } if (!fclose($fh)) { echo ($debug) ? "
  • Error closing file handle!" : ""; return false; } if (!file_exists($file)) { echo ($debug) ? "
  • Error could not create cache file!" : ""; return false; } else { echo ($debug) ? "
  • Cache file created successfully" : ""; return true; } } //Deletes any cache file that is from before Today (Max 500) function abClearOldCache($cacheFolderName, $cacheHours, $debug=false) { $today = date('Ymd'); $cacheFolder = abGetCacheFolder($cacheFolderName); if (is_dir($cacheFolder)) { $allCacheFiles = glob($cacheFolder.'/*.cache'); $todaysCacheFiles = glob($cacheFolder.'/'.$today.'*.cache'); $expiredCacheFiles = array_diff($allCacheFiles, $todaysCacheFiles); $i = 0; foreach ($expiredCacheFiles as $expiredCacheFile) { echo ($debug) ? "
  • Deleting expired cache file: ".$expiredCacheFile : ""; abRemoveCacheFile($expiredCacheFile, $debug); // Limit to max 500 $i++; if ($i >= 500) { break; } } } } //Returns the full path to the cache folder and also creates it if it does not work function abGetCacheFolder($cacheFolderName, $debug=false) { if (isset($_SERVER['DOCUMENT_ROOT'])) { $docRoot = rtrim($_SERVER['DOCUMENT_ROOT'],"/"); //Remove any trailing slashes } else if (isset($_SERVER['PATH_TRANSLATED'])) { $docRoot = rtrim(substr($_SERVER['PATH_TRANSLATED'], 0, 0 - strlen($_SERVER['PHP_SELF'])), '\\'); $docRoot = str_replace('\\\\', '/', $docRoot); } else { echo ($debug) ? "
  • Error: Could not construct cache path" : ""; } $cacheFolder = $docRoot."/".$cacheFolderName; echo ($debug) ? "
  • Cache folder is: ".$cacheFolder : ""; if (!file_exists($cacheFolder)) { echo ($debug) ? "
  • Cache folder does not exist: ".$cacheFolder : ""; if (!@mkdir($cacheFolder,0777)) { echo ($debug) ? "
  • Error - could not create cache folder: ".$cacheFolder : ""; return false; } else { echo ($debug) ? "
  • Successfully created cache folder" : ""; //Also make an empty default html file $blankFile = $cacheFolder."/index.html"; if (!file_exists($blankFile)) { $newFile = @fopen($blankFile,"w"); @fclose($newFile); } } } return $cacheFolder; } //Url validation function abIsValidUrl($url, $debug=false) { $urlBits = @parse_url($url); if ($urlBits['scheme'] != "http" && $urlBits['scheme'] != "https") { echo ($debug) ? "
  • Error! URL does not start with http: ".$url : ""; return false; } else if (strlen($urlBits['host']) < 4 || strpos($urlBits['host'], ".") === false) { echo ($debug) ? "
  • Error! URL is incorrect: ".$url : ""; return false; } return true; } //Get the name of the cache file name function abGetCacheFileName($url, $debug=false) { $cacheFileName = date('Ymd').md5($url).".cache"; echo ($debug) ? "
  • Cache file name for URL: ".$url." is ".$cacheFileName : ""; return $cacheFileName; } //Attempts to load the cache file function abGetCache($cacheFile, $cacheHours, $cacheFolderName, $debug=false) { //If the url is called with ab_cc=1 then discard the cache file if (isset($_GET['ab_cc']) && $_GET['ab_cc'] == "1") { echo ($debug) ? "
  • Clear cache invoked!" : ""; abRemoveCacheFile($cacheFile); unset($_GET['ab_cc']); return false; } if (!file_exists($cacheFile)) { echo ($debug) ? "
  • Error! Cache file does not exist! ".$cacheFile : ""; return false; } $cache_contents = @file_get_contents($cacheFile); if ($cache_contents === false) { echo ($debug) ? "
  • Error: Cache file is completely empty!" : ""; return false; } else { echo ($debug) ? "
  • Cache file contents: ".$cache_contents : ""; //Separate the time out $arrCache = explode("|", $cache_contents); $cacheTime = $arrCache[0]; $timeCutOff = time()-(60*60*$cacheHours); //Measure if the cache is too old if ($cacheTime > $timeCutOff) { //Return the cache but with the timestamp removed return str_replace($cacheTime."|", "", $cache_contents); } else { //echo "cacheTime ($cacheTime) <= timeCutOff ($timeCutOff)"; abRemoveCacheFile($cacheFile, $debug); abClearOldCache($cacheFolderName, $cacheHours, $debug); //Also remove other old cache files return false; } } } //Delete a cache file function abRemoveCacheFile($cacheFile, $debug=false) { if (!@unlink($cacheFile)) { echo ($debug) ? "
  • Error: Could not remove cache file: ".$cacheFile : ""; return false; } else { echo ($debug) ? "
  • Successfully removed the cache file: ".$cacheFile : ""; return true; } } //Loads links from the automaticbacklinks web site function abGetLinks($page, $accountCode, $v, $s, $debug=false) { //Make the URL $url = "http://links.automaticbacklinks.com/links.php"; $url = $url."?a=".$accountCode; $url = $url."&v=".$v; $url = $url."&s=".$s; $url = $url."&page=".urlencode($page); echo ($debug) ? "
  • Making call to AB: ".$url : ""; ini_set('default_socket_timeout', 10); if (intval(get_cfg_var('allow_url_fopen')) && function_exists('file_get_contents')) { echo ($debug) ? "
  • Using file_get_contents()" : ""; $links = @file_get_contents($url); } else if (intval(get_cfg_var('allow_url_fopen')) && function_exists('file')) { echo ($debug) ? "
  • Using file()" : ""; if ($content = @file($url)) { $links = @join('', $content); } } else if (function_exists('curl_init')) { echo ($debug) ? "
  • Using cURL()" : ""; $ch = curl_init ($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $links = curl_exec($ch); curl_close ($ch); } else { echo ($debug) ? "
  • Error: no method available to fetch links!" : ""; return false; } return $links; } //remove ab_cc etc. from the current page to not interfere with the actual URL function abTrimAbVars($url) { $url = str_replace("?ab_cc=1", "", $url); $url = str_replace("&ab_cc=1", "", $url); $url = str_replace("?ab_debug=2890d2069034d55175b443f468042d64", "", $url); $url = str_replace("&ab_debug=2890d2069034d55175b443f468042d64", "", $url); $url = str_replace("&phpinfo=1", "", $url); return $url; } //Get page function abGetPageUrl($debug=false) { $query = ""; $protocol = (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != "off") ? "https://" : "http://"; $host = $_SERVER['HTTP_HOST']; $page = null; if (isset($_SERVER["REDIRECT_URL"]) && !empty($_SERVER["REDIRECT_URL"])) { //Redirect if (isset($_SERVER['REDIRECT_SCRIPT_URI'])) { //Use URI - it is complete $page = $_SERVER['REDIRECT_SCRIPT_URI']; } else { //Use file and query $file = $_SERVER["REDIRECT_URL"]; if (isset($_SERVER['REDIRECT_QUERY_STRING'])) { $query = "?".$_SERVER['REDIRECT_QUERY_STRING']; } } } else { //No redirect if (isset($_SERVER['REQUEST_URI'])) { //Use URI if (substr($_SERVER['REQUEST_URI'],0,4) == "http") { //Request URI has host in it $page = $_SERVER['REQUEST_URI']; } else { //Request uri lacks host $page = $protocol.$host.$_SERVER['REQUEST_URI']; } } else if (isset($_SERVER['SCRIPT_URI'])) { //Use URI - it is complete $page = $_SERVER['SCRIPT_URI']; } else { $file = $_SERVER['SCRIPT_NAME']; if (isset($_SERVER['QUERY_STRING'])) { $query = "?".$_SERVER['QUERY_STRING']; } } } if (empty($page)) { $page = $protocol.$host.$file.$query; } $page = abTrimAbVars($page); echo ($debug) ? "
  • This page is reported as: ".$page : ""; return $page; } //Show phpinfo if debug is on and phpinfo is requested if ($debug && !empty($_GET['phpinfo']) && $_GET['phpinfo']) { ?>
    getLinks(); ?>
  • Előre