• No results found

De krav på systemet som definierades i kravspecifikationen har uppfyllts. Målet med arbetet var att lösa de problem som beskrivits. Det fokuserade problemet som prioriterades var företagets ineffektiva hantering av uppdrag och dess indirekta löneberäkningar.

Resultatet av arbetet ledde till en effektivisering av denna uppdragshantering. Funktionaliteten för att kunna utföra dessa aktiviteter är implementerade i systemet. Istället för att utföra dessa uppgifter för hand kan man nu hantera uppdragen i datorn. Dessutom behöver inte företaget behandla den e-post som de timanställda skickar vid en rapportering. Utöver denna besparing i tid behöver inte heller den administrativa personalen ringa och påminna timanställda om glömda uppdragsrapporteringar då systemet gör detta automatiskt åt dem.

Om man relaterar till de generella mål som definierades under avsnitt 1.5, följer slutsatsen om att systemet har egenskaper som till en acceptabel nivå uppfyller dessa mål. Eftersom det i princip alltid finns förbättringspotential när det gäller dessa idealistiska mål måste man sätta en tröskelnivå någonstans. Dessa egenskaper har varit en mycket viktig del under systemets design och implementation. Några aspekter som särskilt har belysts under arbetets gång har varit principen om plattformsoberoende, korrekthet och säkerhet. Dessa har påverkat vägvalen avsevärt, medan andra aspekter har påverkat men inte till lika stor grad.

Systemet har på grund av den skrivna SMTP-klientfunktionen

minimerat antal beroenden. Systemet kräver endast PHP och MySQL för att fungera.

Baserat på resultatet från testfasen och kompatibilitetskraven i kravspecifikationen tolkas graden av målens uppfyllande som acceptabla.

5 Diskussion

Man kan se systemets krav som uppfyllda, men eftersom det finns förbättringspotential i systemet kan det inte ses som fullständigt. Det finns dessutom stora möjligheter att bygga ut systemet med nya funktioner som ger mervärde för företaget. Arbetet blev begränsat i och med dess begränsade tidsperiod.

Utöver nämda förbättringsåtgärder hade man kunnat tillämpa mer objektorienterade aspekter under implementationsfasen. Detta hade gett en effektivare och kortare kod då man hade kunnat återanvända kod i större grad.

Man skulle också kunna skapa en mer sofistikerad felhantering och mer specifika felmeddelanden i systemet.

Om tid hade funnits hade man kunnat verifiera systemets

användbarhet med hjälp utav brukarstudier. Detta hade gett feedback för förbättringsåtgärder.

Totalt sett kan man dock se arbetet som framgångsrikt då det löst de problem som definierats.

I och med systemets design finns stora möjligheter för utbyggnad. Därmed kan företaget effektivisera sin verksamhet ytterligare.

För att göra rapporten komplett har ett installationsexempel placerats som rapportens sista bilaga. Detta kan vara intressant för företaget i framtiden då det kan finnas en vilja att driva en egen server.

6 Referensförteckning

[1] IETF

Hypertext Transfer Protocol – HTTP/1.1 RFC 2616, 1999

[2] IETF

Uniform Resource Identifier (URI): Generic Syntax RFC 3986, 2005

[3] Stig Jensen & Arne Gjelstrup & Valentino Berti Datakommunikation

Liber, 2000, ISBN: 91-47-01590-X

[4] James Marshall

HTTP Made Really Easy

http://www.jmarshall.com/easy/http/#postmethod (2005-04-20)

[5] David Whalen

The Unofficial Cookie FAQ v2.6

http://www.cookiecentral.com/faq/ (2005-05-11)

[6] Peter Gagnon

The Hypertext Transfer Procotol

http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol2/pcg1/ (2005-04-20)

[7] IETF

Simple Mail Transfer Protocol RFC 2821, 2001

[8] Spyros Sakellariadis SMTP Mail Basics

http://www.windowsitlibrary.com/Content/212/01/3.html?Ad=1& (2005-04-21)

[9] Trivial uses of Telnet - SMTP Scripts

http://evolvedcode.net/content/doc_alttelnet/index_p5.asp (2005-04-21)

[10] IETF

The MIME Multipart/Related Content-type RFC 1872, 1995

[11] Database Management System

http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?DBMS (2005-05-11)

[12] James Groff

SQL:The complete Reference, second edition

McGraw-Hill Professional, 2002, ISBN: 0-07-222559-9

[13] ODBMS FAQ

http://www.service-architecture.com/object-oriented-databases/ articles/odbms_faq.html (2005-04-06)

[14] Steve McClure

Object Database vs. Object-Relational Databases

[15] Introduction to OMG UML

http://www.omg.org/gettingstarted/what_is_uml.htm (2005-04-05)

[16] Mats Apelkrans, Karita Åbom OOS/UML

Studentlitteratur, 2001, ISBN: 91-44-02138-0

[17] Mark Maslakowski

Lär dig MySQL på tre veckor

Pagina förlags AB, 2000, ISBN: 91-636-0627-5

[18] William Kent

A Simple Guide to Five Normal Forms in Relational Database Theory http://www.bkent.net/Doc/simple5.htm (2005-05-15)

[19] Mike McGrath SQL in easy steps

Computer Step, 2004, ISBN: 1-84078-257-9

[20] Mike Chapple SQL Fundamentals http://databases.about.com/od/sql/a/sqlfundamentals.htm (2005-05-15) [21] David R. Frick A SQL Vocabulary http://www.frick-cpa.com/ss7/Theory_SQL_Vocab.asp#DCL (2005-05-15)

[22] Raul Chong, Clara Liu, Sylvia Qi, Dwaine Snow Introduction to DB2 UDB

http://www.informit.com/articles/article.asp?p=375536&rl=1 (2005-05-15)

[23] Sybase ASE History

http://www.ispirer.com/doc/sqlways38/Output/SQLWays-1-172.html (2005-05-15)

[24] 5 Things You Probably Didn't Know About T-SQL

http://www.windowsitpro.com/Article/ArticleID/22831/22831.html (2005-05-15)

[25] SQL Server 2000 Product Overview

http://www.microsoft.com/sql/evaluation/overview/default.asp (2005-05-15)

[26] About MySQL AB

http://www.mysql.com/company/ (2005-04-06)

[27] Frank Naudé

FAQ about Oracle Corporation v1.37

http://www.orafaq.com/faqora.htm (2005-05-15)

[28] Oracle Database 10g

http://www.oracle.com/technology/products/database/oracle10g/index.html (2005-05-15)

[29] Chuck Musciano, Bill Kennedy

HTML The Definitive Guide, Third Edition O'Reilly, 1998, ISBN: 1-56592-492-4

[30] W3C HTML 4.01 Specification http://www.w3.org/TR/html401 (2005-05-15) [31] HTML 4.01 Reference http://www.w3schools.com/html/html_ref_byfunc.asp (2005-04-07) [32] A history of HTML http://www.w3.org/People/Raggett/book4/ch02.html (2005-04-07) [33] CSS 2.1 Specification http://www.w3.org/TR/CSS21/ (2005-05-15) [34] CSS Syntax http://www.w3schools.com/css/css_syntax.asp (2005-04-07) [35] Dave Taylor

Creating Cool Web Sites with HTML, XHTML and CSS John Wiley and Sons, 2004, ISBN: 0764557386

[36] XHTML 1.0 The Extensible HyperText Markup Language (Second Edition) http://www.w3.org/TR/xhtml1/ (2005-05-15)

[37] April 2005 Web Server Survey

http://news.netcraft.com/archives/2005/04/01/april_2005_web_ server_survey.html (2005-04-10)

[38] About the HTTP server project

http://httpd.apache.org/ABOUT_APACHE.html (2005-04-09)

[39] Apache Server Frequently Asked Questions

http://httpd.apache.org/docs/misc/FAQ.html (2005-05-15)

[40] Frequently Asked Questions

http://apache.org/foundation/faq.html#what (2005-04-09)

[41] Overview of Deploying IIS 6.0

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/ Library/IIS/f6fd347f-d336-4e8d-b2c0-3ae3d3e26d0d.mspx (2005-04-12) [42] ISAPI http://www.webopedia.com/TERM/I/ISAPI.html (2005-05-15) [43] Three-tier http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=Three-tier&action= Search (2005-05-15) [44] Three-tier http://www.webopedia.com/TERM/t/three_tier.html (2005-05-15)

[45] Internet Information Services

[46] PC Magazine Performance Tests: Web Servers

http://www.pcmag.com/article2/0,1759,11536,00.asp (2005-04-12)

[47] Zeus, An All-Powerful Solution for the Enterprise

http://www.serverwatch.com/sreviews/article.php/10903_3421791_1 (2005-04-12)

[48] Internet Explorer Overview

http://www.microsoft.com/windows/ie/evaluation/overview/default.mspx (2005-05-15)

[49] Why Use Firefox?

http://www.mozilla.org/products/firefox/ (2005-05-15)

[50] Apple - Mac OS X - Safari RSS

http://www.apple.com/macosx/features/safari/ (2005-05-15)

[51] Introduction to ASP

http://www.w3schools.com/asp/asp_intro.asp (2005-05-15)

[52] PHP vs. ASP.NET

http://www.oracle.com/technology/pub/articles/hull_asp.html (2005-04-12)

[53] Common Gateway Interface

http://hoohoo.ncsa.uiuc.edu/cgi/intro.html (2005-05-15) [54] FastCGI Home http://www.fastcgi.com/ (2005-04-12) [55] FastCGI Specification Mark R. Brown http://www.fastcgi.com/devkit/doc/fcgi-spec.html#S1 (2005-05-15)

[56] JavaServer Pages Technology - Implementations & Specifications http://java.sun.com/products/jsp/reference/api/index.html (2005-05-15)

[57] Java Servlet Technology

http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets.html (2005-05-15)

[58] The Jakarta Site - Apache Jakarta Tomcat http://jakarta.apache.org/tomcat/ (2005-05-15)

[59] What is PHP?

http://se2.php.net/manual/en/introduction.php (2005-05-15)

[60] What can PHP do?

http://se2.php.net/manual/en/intro-whatcando.php (2005-05-15)

[61] Using PHP from the command line

http://www.php.net/manual/en/features.commandline.php (2005-04-19)

[62] Introduction to PHP-GTK

http://gtk.php.net/manual/en/introduction.php (2005-04-19)

[63] Mike McGrath

JavaScript in easy steps

[64] David Flanagan

JavaScript: The Definite Guide

O'Reilly, 2002, 2002, ISBN: 0-596-00048-0

[65] Jan Gulliksen, Bengt Göransson Användarcentrerad systemdesign

Studentlitteratur, 2002, ISBN: 91-44-02029-5

[66] International Organization for Standardization Guidance on Usability ISO 9241-11, 1998 [67] Security http://www.dtic.mil/doctrine/jel/doddict/data/s/04749.html (2005-05-15) [68] Anderson, Ross Security Engineering Wiley, 2001, ISBN 0471389226

[69] The CIA principle

http://www.doc.ic.ac.uk/~ajs300m/security/CIA.htm (2005-05-15) [70] Non-repudiation http://searchsecurity.techtarget.com/sDefinition/0,,sid14_gci761640,00.html (2005-05-15) [71] What is cryptography? http://www.rsasecurity.com/rsalabs/node.asp?id=2157 (2005-05-15) [72] Chris Shiflett ApacheCon: PHP Security http://shiflett.org/php-security.pdf (2005-04-23)

[73] SQL Injection Attacks By Example

http://www.unixwiz.net/techtips/sql-injection.html (2005-04-23)

[74] W3C Teknologi

http://www.w3.org/Consortium/technology.html (2005-04-18)

[75] W3C Historia

http://www.w3.org/Consortium/history.html (2005-04-18)

[76] The W3C Technology Stack

http://www.w3.org/2004/10/RecsFigure-Smaller.png (2005-05-15)

[77] W3C (World Wide Web Consortium)

http://www.w3.org/Consortium/Overview.html (2005-04-18)

[78] JPEG image compression FAQ

http://www.faqs.org/faqs/jpeg-faq/part1/ (2005-05-15)

[79] JPEG Compression

[80] An Overview of JPEG-2000 http://www.rii.ricoh.com/%7Egormish/pdf/dcc2000_jpeg2000_note.pdf (2005-05-15) [81] Intro to PNG features http://www.libpng.org/pub/png/pngintro.html (2005-05-15) [82] W3C, PNG http://www.w3.org/Graphics/PNG/ (2005-04-21) [83] W3C, XHTML 1.0 http://www.w3.org/MarkUp/ (2005-04-22)

[84] W3C, Cascading Style Sheets

http://www.w3.org/Style/CSS/ (2005-04-22)

[85] W3C, Style Sheets

http://www.w3.org/Style/ (2005-04-22)

[86] W3C, Date and Time Formats

http://www.w3.org/TR/NOTE-datetime (2005-04-22)

[87] A summary of the International standard date and time notation http://www.cl.cam.ac.uk/~mgk25/iso-time.html (2005-04-22)

7 Sökord

A Användarcentrerade system...38 Apache...29 ASP...34 Avgränsning...10 C CGI...35 CSS...26 D Databasmodellering...53 Datasäkerhet...40 DBMS...17 Diskussion...75 H HTML...25 HTTP...11 I IBM DB2...24 IIS...30 Internet explorer...31 J JPEG...46 JSP...36 M Mål och syfte...9 Microsoft SQL Server...24 Mozilla Firefox...32 MySQL...24 N Normalisering...19 O Oracle...24 P PHP...36 PNG...48 R Resultat...63 S Safari...33 Slutsats...74 SMTP...14 SQL...19 V Verksamhetsbeskrivning...7 W W3C...45 X XHTML...28 Z Zeus...31

Bilagor

Bilaga 1 Kravspecifikation Bilaga 2 Klassdiagram

Bilaga 3 Screenshots ifrån olika plattformar Bilaga 4 PHP-klasser

Funktionalitet: Administrativ del • Inloggningsfunktion

• Hantering av företagsinformation (ändra)

• Hantering av timanställda (söka, ändra)

• Hantering av kunder (lägga till, söka, ändra)

• Hantering av uppdrag (lägga till, söka, ändra)

• Kalenderfunktion för att granska rapporteringar

• Översiktlig månadsvis summering av uppdrag

• Individuell månadsvis löneberäkning

• Loggfunktion (övervakning av hur systemet används; riskanalys och felsökning)

• Utloggningsfunktion

Funktionalitet: Användardelen • Inloggningsfunktion

• Epostfunktion som skickar glömda lösenord

• Hantering av personuppgifter samt kontouppgifter

• Kalenderfunktion för att granska individuella uppdrag

• Rapporteringsfunktion för utförda uppdrag

• Utloggningsfunktion

Funktionalitet: Automatiska funktioner

• Epostfunktion som påminner användare om ej rapporterade uppdrag (en vecka efter uppdragets datum).

Utformning av grafiskt gränssnitt

• Ett användarcentrerat system som användare utan större problem kan lära sig och arbeta effektivt i. Gränssnittet ska vara självförklarande, konsekvent samt lösa de aktuella problemen.

Kompatibelitetskrav

• Plattformsoberoende design som minimerar beroenden till andra programvaror om möjligt. Det ska gå att kunna köra systemet på alla plattformar.

• Systemet ska vara designat med långsiktighet och kompatibilitet som mål. Det ska gå att köra det på så många webbläsare som möjligt oavsett plattform. Det ska inte kräva några extra plugins, utan ska fungera med standardprogramvaror.

• Systemet är tänkt att köras på ett webbhotell. Det skall därför vara kompatibelt med sådana plattformar.

Log Timanstalld Uppdrag_Medlem Uppdrag Kund Foretagsuppgift *ForetagsuppgiftID Foretagsnamn Adress Postnummer Ort Telefonnr Mobiltelefonnr Epostadress Organisationsnr Momsregnr Bankgiro Plusgiro Arbetsgivaravgift Inkomstskatt *LogID Username Datum Timestamp IP DNS UserAgent Typ Beskrivning *KundID Foretagsnamn Adress Postnummer Ort Kontaktperson Telefonnr Faxnr Mobiltelefonnr Avdelning Epostadress *Username Password Skapades TimanstalldID Personnummer Fornamn Efternamn Adress Postnummer Ort Telefonnr Mobiltelefonnr Epostadress *UppdragID *TimanstalldID Rapporterat Kommentar Paminnelse Starttid Sluttid Rast1_Starttid Rast1_Sluttid Rast2_Starttid Rast2_Sluttid Rast3_Starttid Rast3_Sluttid *UppdragID Datum Starttid Sluttid Foretagsnamn Beskrivning Kommentar T_Dag_Starttid T_Dag_Sluttid T_Kvall_Starttid T_Kvall_Sluttid T_Natt_Starttid T_Natt_Sluttid T_Dag_Lon T_Kvall_Lon T_Natt_Lon 1..* 1 1..* 1 1 1..* 1 0..*

• En kund kan vara med i inget eller flera uppdrag. Ett uppdrag refererar endast till en kund.

• Varje Uppdrag har en eller flera medlemmar, medan varje medlem av uppdraget har en relation till tabellen uppdrag.

• Varje Uppdrag består av en eller flera timanställda. En timanställd kan förekomma en gång per uppdrag.

• En timanställd har inga eller flera loggar. En log refererar endast till en timanställd.

new_assignment.php

Internet Explorer, Windows

calender.php

Internet Explorer, Windows

Nedanstående kod är anpassad för det utvecklingssystem som använts vid skapandet av systemet. Lösenord och liknande uppgifter har ingen relation till den verkliga implementationen.

class Time

{

#--- # Functions for today's time

#---

# Return today's year, 4 digits public function TodayYear() {

$year = date("Y"); return $year; }

# Return today's month, without leading zeros public function TodayMonth()

{

$month = date("n"); return $month; }

# Return today's day of the month, without leading zeros public function TodayDay()

{

$day = date("j"); return $day; }

# Return today's week public function TodayWeek() {

$week = date("W"); return $week; }

# Return ISO 8601 formated string public function TodayISO8601() {

$date = date("c");

$date = substr($date,0,10); return $date; }

# Return UNIX timestamp formatted integer public function TodayUNIXTimestamp() {

$timestamp = date("U"); return $timestamp; }

#---

# Calculate the date for the monday in a week. Return value in UNIX timeformat public function MondayDateWeek($year,$week)

{

$days = array("Mon","Tue","Wed","Thu","Fri","Sat","Sun");

# Calculate the dayname for the 4th January (the 4th always in week 1) $day = date("D",mktime(0,0,0,1,4,$year) );

# Determine which index to use for($i = 0; $i<7 ; $i++) {

if ($days[$i] == $day) break;

}

# Calculate the date for the monday in that week $firstmonday = (4 - $i);

# Take care of weeks that begin on the previous year if ($firstmonday < 1)

{

$firstmonday = (31 + $firstmonday);

$time = mktime(0,0,0,12, ($firstmonday + (($week-1) * 7 )), ($year-1) ) ; }

# Take care of all other years else

{

$time = mktime(0,0,0,1, ($firstmonday + (($week-1) * 7 )),$year ) ; }

return $time; }

# Return Year from UNIX timeformat public function UNIXtoYear($time) {

$year = date("Y",$time); return $year;

}

# Return Month from UNIX timeformat public function UNIXtoMonth($time) {

$month = date("n",$time); return $month;

}

# Return Day from UNIX timeformat public function UNIXtoDay($time) {

$day = date("j",$time); return $day;

}

# Return the week number from UNIX timeformat public function UNIXtoWeek($time)

}

# Return total number of weeks in a year public function NrWeeks($year)

{ for ($i=25;$i<=40;$i++) { $weeknr = date("W",mktime(0,0,0,12,$i,$year) ) . "<br>"; if ($weeknr == 53) break; } if ($i == 41) return 52; else return 53; }

# Calculate which month that is dominating in a week. Based on MondayDateWeek() public function DominatingMonth($time)

{

$month_count = array(0,0,0,0,0,0,0,0,0,0,0,0); for($i=0; $i<7; $i++)

{

$month = date("n",($time+ (3600*24*$i) ) ) . "<br>"; switch ($month) { case 1: $month_count[0] += 1; break; case 2: $month_count[1] += 1; break; case 3: $month_count[2] += 1; break; case 4: $month_count[3] += 1; break; case 5: $month_count[4] += 1; break; case 6: $month_count[5] += 1; break; case 7: $month_count[6] += 1; break; case 8: $month_count[7] += 1; break; case 9: $month_count[8] += 1; break; case 10: $month_count[9] += 1; break; case 11: $month_count[10] += 1; break; case 12:

} }

# Determine the highest countvalue $max = 0;

for($i=0; $i<12; $i++) {

if ($month_count[$i] > $max) $max = $month_count[$i]; }

# Find the month that has the highest countvalue for($i=0; $i<12; $i++)

{ if ($month_count[$i] == $max) break; } $dominating_month = ($i + 1); return $dominating_month; }

# Return the year from ISO8601 format public function ISO8601_to_year($date) {

return substr($date,0,4) ; }

# Return the month from ISO8601 format public function ISO8601_to_month($date) { if (substr($date,5,1) == "0") return substr($date,6,1) ; else return substr($date,5,2); }

# Retorn the day from ISO8601 format public function ISO8601_to_day($date) { if (substr($date,8,1) == "0") return substr($date,9,1) ; else return substr($date,8,2); }

# Return date in ISO8601 format from three variables # with no preceding zero

public function toValidISO8601($year,$month,$day) {

if ($month < 10) {

if ($day < 10)

$date = $year . "-0" . $month . "-0" . $day; else

$date = $year . "-0" . $month . "-" . $day; }

else {

$date = $year . "-" . $month . "-" . $day; } return $date; } } class Mail {

public function send_mail($mail_from,$mail_to,$subject,$message_plain_text, $message_html)

{

#--- Sends an e-mail encoded with base64 with MIME (plain text & html) --- # Define system specific parameters

$local_hostname = "guilong.org"; $smtp_hostname = "smtp.bredband.net"; $phpheader = "PHP/" . phpversion(); # Encode message data into base64 format

$base64_plain_text = base64_encode($message_plain_text); $base64_html = base64_encode($message_html);

# Collect message data and concaternate it into a string $CRLF = "\r\n";

$message = $CRLF . "This is a multi-part message in MIME format." . $CRLF . $CRLF . "--next_part" . $CRLF .

"Content-Type: text/plain; charset=\"ISO-8859-1\"" . $CRLF . "Content-Transfer-Encoding: base64" . $CRLF .

$CRLF . $base64_plain_text . $CRLF . $CRLF . "--next_part" . $CRLF .

"Content-Type: text/html; charset=\"ISO-8859-1\"" . $CRLF . "Content-Transfer-Encoding: base64" . $CRLF .

$CRLF . $base64_html . $CRLF . $CRLF . "--next_part--" . $CRLF . $CRLF . "." . $CRLF ;

# Create SMTP command strings

$HELLO = "HELO " . $local_hostname . $CRLF; $MAIL_FROM = "MAIL FROM: " . $mail_from . $CRLF; $RCPT_TO = "RCPT TO: " . $mail_to . $CRLF; $DATA = "DATA" . $CRLF;

$MESSAGE = "MIME-Version: 1.0" . $CRLF .

"Content-Type: multipart/alternative; boundary=\"next_part\"" . $CRLF . "From: Quickmatch" . $CRLF . "To: " . $mail_to . $CRLF . "Subject: " . $subject . $CRLF . "X-Mailer: " . $phpheader . $CRLF . $message ; $QUIT = "QUIT" . $CRLF ; $command_sequence = array($HELLO,$MAIL_FROM,$RCPT_TO,$DATA,$MESSAGE); # Create socket and send the data

$fp = @fsockopen($smtp_hostname, 25); $status = 0;

$status = -1; } else { for($i=0;$i<=4;$i++) { if ($i ==0) { $result = @fgets($fp, 1024); #echo $result; }

if ( ($i == 0) && (substr($result,0,3) == 220) ) {

@fputs($fp,$command_sequence[$i]); $result = @fgets($fp, 1024); #echo $result;

}

else if ( ($i > 0) && (substr($result,0,3) == 250) ) {

@fputs($fp,$command_sequence[$i]); $result = @fgets($fp, 1024); #echo $result;

}

else if ( ($i == 4) && (substr($result,0,3) == 354) ) { @fputs($fp,$command_sequence[$i]); $result = @fgets($fp, 1024); #echo $result; } else {

#An error occured while communicating with server $status = -1;

break; }

# Everything went well if ($i == 4)

$status = 1; }

#Send quit command @fputs($fp, $QUIT); $result = @fgets($fp, 1024); #echo $result; } # Close socket @fclose($fp); if($status == 1) return $status; else {

#An error occured while sending data return $status;

} } }

public function log_entry($username,$type,$description) {

# Create connection to database

$handle_ID = mysql_connect("localhost","mysql","SYu#aR8u%9GX") ; $select = mysql_select_db("Quickmatch") ;

$SQL = "SELECT MAX(LogID) AS MaxLogID FROM Log;"; $res_ID = mysql_query($SQL,$handle_ID);

$row=mysql_fetch_object($res_ID); $nextvalue = ($row->MaxLogID + 1); $Time = new Time;

$date = $Time->TodayISO8601();

$timestamp = $Time->TodayUNIXTimestamp(); $ip = $_SERVER['REMOTE_ADDR']; #$dns = $_SERVER['REMOTE_HOST']; $useragent = $_SERVER['HTTP_USER_AGENT'];

# Add entry without DNS value, which can be added manually (for performance reasons)

$SQL = "INSERT INTO Log(LogID,Username,Datum,Timestamp,IP,UserAgent,

Typ,Beskrivning) VALUES ($nextvalue,\"$username\",\"$date\",$timestamp, \"$ip\",\"$useragent\",$type,\"$description\")";

$res_ID = mysql_query($SQL,$handle_ID); # Close database connection

mysql_close($handle_ID); }

public function clear_log() {

# Create connection to database

$handle_ID = mysql_connect("localhost","mysql","SYu#aR8u%9GX") ; $select = mysql_select_db("Quickmatch") ;

# Clear table exept for reference row $SQL = "DELETE FROM Log WHERE LogID >0"; $res_ID = mysql_query($SQL,$handle_ID); #Close database connection

mysql_close($handle_ID); }

Eftersom systemet är plattformsoberoende existerar ett flertal fungerande lösningar. En vanlig variant är dock att använda sig av operativsystemet Linux som på grund av sin licensmodell har många fördelar. Nedan beskrivs en möjlig implementation som inriktar sig på fallet där företaget hanterar en egen server.

Detaljerna i exemplet (programversioner) kommer av naturliga skäl att förändras med tiden, medan de principiella stegen kommer vara oförändrade. I likhet med bilaga 4 beskrivs lösenord för testsystemet som inte används i den verkliga implementationen.

Beskrivningen nedan baserar sig på följande nätverksstruktur:

Kärnan

Om kärnan tidigare är konfigurerad för någon annan

tillämpning, kan detta påverka säkerheten och prestandan. I enstaka fall kan det dock visa sig att även stabiliteten kan påverkas. Drivrutiner som fungerar klanderfritt på vissa chipsets kan orsaka kernel panic eller något mindre allvarligt stabilitetsproblem. Av denna anledning är det fördelaktigt att anpassa kärnan specifikt för en viss datorkonfiguration.

Metod för att starta kernelkonfigureringen (i /usr/src):

tar jxvf linux-2.6.10.tar.bz2 ln -s linux-2.6.10 linux cd linux

make menuconfig

Kommandot “make menuconfig” startar upp ett textbaserat menysystem (ncursesbaserat), där man ställer in lämplig konfiguration.

på hårdvaran. Man kan ge vissa riktlinjer men i princip är det en unik konfigurering. Eftersom det är relativt

orelevant att beskriva vilka lågnivådrivrutiner man valt (t.ex. vilken ATA-driver man valt) beskrivs

högnivådrivrutiner som direkt påverkar serverns

funktionalitet. Man kan benämna det som maskinoberoende inställningar.

För att operativsystemet ska fungera bättre under hög belastning har kerneloption:et “Preemptible Kernel” (CONFIG_PREEMPT) aktiverats. Detta val minskar kernel- latencyn genom att tillåta avbryting för vissa processer när de är i kernel mode.

Eftersom servern kommer vara anslutet till Internet med risk för DoS-attacker har “IP: TCP syncookie support” (CONFIG_SYN_COOKIES) aktiverats för att minimera de tänkbara problemen. Med denna inställning påslagen kan klienter kommunicera med servern trots samtidig SYN

flooding. En nackdel med denna metod är att felrapportering när servern verkligen är belastad på normalt sätt inte sker till klienter.

Det är dock sannolikt att serverns normala belastning

aldrig når den gränsen och därmed blir detta inget problem. För att aktivera TCP syncookie support måste man förrutom kernelstödet även aktivera det med:

echo 1 >/proc/sys/net/ipv4/tcp_syncookies

Detta kan göras t. ex. via initscriptet “/etc/rc.d/rc.local”.

För att garantera att ingen trafik överhuvud taget ska kunna existera mellan server och klient på någon annan port än 80 och 22 väljs inställningen “Network packet

filtering”. Följande moduler kompileras in i kärnan:

IP: Netfilter Configuration:

Connection trackin (CONFIG_IP_NF_CONNTRACK) IP tables support (CONFIG_IP_NF_IPTABLES)

limit match support (CONFIG_IP_NF_MATCH_LIMIT)

Related documents