<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HumanWorks - SEO and Web development &#187; php</title>
	<atom:link href="http://humanworks.gr/blog/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://humanworks.gr</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Tue, 27 Jul 2010 12:45:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Securing PhP, μέρος 2</title>
		<link>http://humanworks.gr/php/securing-php-%ce%bc%ce%ad%cf%81%ce%bf%cf%82-2/</link>
		<comments>http://humanworks.gr/php/securing-php-%ce%bc%ce%ad%cf%81%ce%bf%cf%82-2/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 06:25:43 +0000</pubDate>
		<dc:creator>Νίκος Παπανώτας</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[secuity]]></category>

		<guid isPermaLink="false">http://humanworks.gr/?p=274</guid>
		<description><![CDATA[Πέρασε αρκετός καιρός απο το προηγούμενο post σχετικά με PhP, και έτσι είπα να επανέλθω με ακόμα ένα άρθρο για php security. Ως γνωστόν η ασφάλεια είναι ένα απο τα σημαντικότερα πράγματα που πρέπει να προσέξουμε στο web development αφού οι συνέπειες μιας πιο ανάλαφρης αντιμετώπισης του θέματος μπορεί να είναι τουλάχιστον καταστροφικές. Παρακάτω θα [...]]]></description>
			<content:encoded><![CDATA[<p>Πέρασε αρκετός καιρός απο το προηγούμενο post σχετικά με <a href="http://humanworks.gr/blog/php/">PhP</a>, και έτσι είπα να επανέλθω με ακόμα ένα άρθρο για <a href="http://humanworks.gr/php/securing-php-%CF%84%CE%B1-%CE%B2%CE%B1%CF%83%CE%B9%CE%BA%CE%AC/">php security</a>. Ως γνωστόν η ασφάλεια είναι ένα απο τα σημαντικότερα πράγματα που πρέπει να προσέξουμε στο web development αφού οι συνέπειες μιας πιο ανάλαφρης αντιμετώπισης του θέματος μπορεί να είναι τουλάχιστον καταστροφικές. Παρακάτω θα προσπαθήσω να αναλύσω μερικές παραμέτρους που δέν ανέπτυξα στο <a href="http://humanworks.gr/php/securing-php-%CF%84%CE%B1-%CE%B2%CE%B1%CF%83%CE%B9%CE%BA%CE%AC/">προηγούμενο άρθρο</a> για το θέμα:</p>
<h3>Register_Globals</h3>
<p>Θα ξεκινήσουμε με κάτι απλό που έχει ειπωθεί αρκετές φορές &#8211; μια και που είναι αρκετά παλιά &#8220;τρύπα&#8221; &#8211; το register globals. Το register_globals είναι ένα directive στο php.ini το οποίο κάνει register ως μεταβλητές οτιδήποτε υπάρχει στο $_COOKIE, το $_SESSION, το $_POST και το $_GET. Με άλλα λόγια αν για παράδειγμα κάποιος καλέσει ένα url και προσθέσει στο τέλος &#8220;?a=1&#8243;, μέσα στην εφαρμογή θα υπάρχει η μεταβλητή $a που θα έχει τιμή 1.</p>
<p>Με μια πρώτη ματιά δέν φαίνεται να υπάρχει πρόβλημα, ωστόσο φανταστείτε τί μπορεί να γίνει στο παρακάτω παράδειγμα αν ο χρήστης έχει προσθέσει στο url το εξής: &#8220;?admin=1&#8243;</p>
<pre class="brush: php;">

if ( isset( $_SESSION['admin']) &amp;&amp; $_POST['security_code'] == '12345' ){
$admin = true;
}
</pre>
<h3>eval</h3>
<p>Η <a href="http://www.webdigity.com/php-manual/function.eval.html">eval()</a> είναι μια function που εξ&#8217;ορισμού θέλει πολύ προσοχή αφού η λάθος χρήση της μπορεί να επιτρέψει σε κάποιον να τρέξει οτιδήποτε στον server μας. Το σημαντικό είναι να μήν χρησιμοποιούμε ποτέ δεδομένα απο τον χρήστη($_POST, $_GET) μέσα στην eval() ή αν το κάνουμε αυτό τουλάχιστον να είμαστε σίγουροι πως ο χρήστης δέν μπορεί να &#8220;βγεί&#8221; απο την εντολή που θέλουμε (αυτό κυρίως γίνεται με την εισαγωγή ενός ελληνικού ερωτηματικού)</p>
<h3>Remote file inclusion</h3>
<p>Ακόμα ένα σημαντικό θέμα είναι το remote file inclusion. Στα περισσότερα default setup της php είναι ενεργοποιημένο, και αυτό που κάνει είναι να επιτρέπει να κάνουμε include scripts απο άλλους servers. Για το συγκεκριμένο vurnerability έχουν γραφτεί αρκετά exploits τα οποία μπορούν να δώσουν full access στον server. Για να σιγουρευτείτε οτι δέν έχετε πρόβλημα πρέπει αφενός να μήν χρησιμοποιείτε ποτέ στην include δεδομένα που σας δίνει ο χρήστης (αυτό είναι γενικά πρόβλημα, όχι μόνο για τα remote file inclusions) ενώ παράλληλα φροντίστε στο php.ini το directive <tt>allow_url_include να είναι Off</tt><strong><tt>.</tt></strong></p>
<h3>Session fixation</h3>
<p>Το session fixation είναι ένα σχετικά χαμηλού ρίσκου vurnerability, το οποίο ουσιαστικά επιτρέπει σε κάποιον &#8220;κακόβουλο&#8221; να πάρει πρόσβαση με τα στοιχεία κάποιου χρήστη της εφαρμογής μας. Για το συγκεκριμένο θέμα μπορούμε να κάνουμε δύο κινήσεις. Το πρώτο να έχουμε διαφορετικά path για τα session ανα domain (αλλάζοντας το session.save_path στο htaccess του κάθε site) και το δεύτερο είναι το να χρησιμοποιούμε συχνά μέσα στην εφαρμογή μας την εντολή <a href="http://www.webdigity.com/php-manual/function.session-regenerate-id.html"><tt>session_regenerate_id()</tt></a>. Βέβαια η απόλυτη λύση &#8211; η οποία βοηθάει γενικότερα &#8211; είναι το να έχουμε custom session handler, ωστόσο αυτό είναι κάπως advanced θέμα.</p>
<h3>Error reporting</h3>
<p>Ένα απλό αλλα εξίσου σημαντικό θέμα είναι πως στον production server πρέπει να μήν εμφανίζονται τα λάθη της php γιατί εφόσον εμφανίζονται κάνουμε την ζωή του hacker πολύ πιο εύκολη <img src='http://humanworks.gr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . Ο τρόπος να το λύσουμε αυτό είναι απλά να αλλάξουμε το directive <code>display_errors σε Off. Φυσικά για να μπορούμε να παρακολουθούμε τα προβλήματα που έχει η εφαρμογή μας σε production περιβάλλον μπορούμε να χρησιμοποιήσουμε log files (directive: log_errors) ή ακόμα και να δημιουργήσουμε <a href="http://www.webdigity.com/index.php/topic,92.0.Custom+error+reporting+script.html">custom error handlers</a>.<br />
</code></p>
<h3>PhP Security scripts</h3>
<p>Για το τέλος άφησα μερικά scripts που έχω ανακαλύψει και μπορούν να σας βοηθήσουν στο να ανακαλύπτετε security προβλήματα με τις εφαρμογές σας.</p>
<ul>
<li> <a href="http://phpsec.org/projects/phpsecinfo/index.html">PhpSecInfo</a></li>
<li> <a href="http://sourceforge.net/projects/securityscanner/">PHP Security Scanner </a></li>
<li> <a href="http://developer.spikesource.com/projects/phpsecaudit/">Spike PHP Security Audit Tool </a></li>
</ul>
<p>Ελπίζω να σας άρεσε η συνέχεια του άρθρου για την <a href="http://humanworks.gr/php/securing-php-τα-βασικά/">ασφάλεια σε php</a>, αν πιστεύετε οτι μου διέφυγε κάτι αφήστε ένα σχόλιο <img src='http://humanworks.gr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://humanworks.gr/php/securing-php-%ce%bc%ce%ad%cf%81%ce%bf%cf%82-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Η άσχημη πλευρά του traffic</title>
		<link>http://humanworks.gr/tutorials/%ce%b7-%ce%ac%cf%83%cf%87%ce%b7%ce%bc%ce%b7-%cf%80%ce%bb%ce%b5%cf%85%cf%81%ce%ac-%cf%84%ce%bf%cf%85-traffic/</link>
		<comments>http://humanworks.gr/tutorials/%ce%b7-%ce%ac%cf%83%cf%87%ce%b7%ce%bc%ce%b7-%cf%80%ce%bb%ce%b5%cf%85%cf%81%ce%ac-%cf%84%ce%bf%cf%85-traffic/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 14:16:12 +0000</pubDate>
		<dc:creator>Νίκος Παπανώτας</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[overhead]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://humanworks.gr/?p=239</guid>
		<description><![CDATA[Κάθε webmaster στοχεύει στο να έχει όσο το δυνατόν περισσότερο traffic στο site του. Ωστόσο μερικές φορές το traffic προκαλεί μεγάλα προβλήματα. Μεγάλος χρόνος απόκρισης, πεσμένοι servers μεταξύ άλλων είναι οι πονοκέφαλοι που μπορείτε να συναντήσετε όσο το site σας προχωράει στον δρόμο της επιτυχίας.

Φυσικά αυτά είναι τα ομορφότερα προβλήματα που μπορείτε να συναντήσετε σαν [...]]]></description>
			<content:encoded><![CDATA[<p>Κάθε webmaster στοχεύει στο να έχει όσο το δυνατόν περισσότερο traffic στο site του. Ωστόσο μερικές φορές το traffic προκαλεί μεγάλα προβλήματα. Μεγάλος χρόνος απόκρισης, πεσμένοι servers μεταξύ άλλων είναι οι πονοκέφαλοι που μπορείτε να συναντήσετε όσο το site σας προχωράει στον δρόμο της επιτυχίας.</p>
<p><img class="aligncenter size-full wp-image-240" title="@titanas" src="http://humanworks.gr/wp-content/uploads/2009/02/titanas.jpg" alt="" width="500" height="262" /></p>
<p>Φυσικά αυτά είναι τα ομορφότερα προβλήματα που μπορείτε να συναντήσετε σαν publisher, χωρίς αυτό να σημαίνει οτι δέν πρέπει να είμαστε προετοιμασμένοι. Παρακάτω σας περιγράφω κάποιες λύσεις που δούλεψαν για εμάς και εύχομαι να σας χρειαστούν <img src='http://humanworks.gr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Apache optimization</h3>
<p>Καταρχήν είναι πολύ σημαντικό να είναι σωστά configured ο web server σας. Στην περίπτωση που είστε σε shared hosting μάλλον δέν σας ενδιαφέρει, ωστόσο αν έχετε dedicated server μπορείτε να χρησιμοποιήσετε κάποια απο τις <a href="http://httpd.apache.org/test/">testing εφαρμογές</a> για Apache που μπορούν να σας βοηθήσουν με το σωστό configuration του server.</p>
<h3>Static vs Dynamic content</h3>
<p>Ας δούμε λίγο πώς σερβίρει ένας web server μία σελίδα, και πιό συγκεκριμένα ο Apache. Όταν ζητάμε μία σελίδα, ουσιαστικά κάνουμε ένα request για κάθε αντικείμενο αυτής (html, τα css, τις εικόνες, κτλ) Για κάθε request ο server απασχολεί ένα process το οποίο ασχολείται με το &#8220;σερβίρισμα&#8221;. Όταν κάποιο process τελιώσει, τότε περιμένει κάποιο διάστημα, και αν δέν του ζητηθεί κάποια άλλη σελίδα τότε &#8220;πεθαίνει&#8221;.</p>
<p>Μέχρι εδώ όλα καλά, ωστόσο σε ένα site με μεγάλο load, υπάρχει ένα σημαντικό πρόβλημα. Ας υποθέσουμε οτι ένα process σερβίρει μία δυναμική σελίδα. Ενδεχομένως να χρησιμοποιηθούν 30mb μνήμης απο το script που παράγει την σελίδα. Όταν τελειώσει το parsing, το process δέν θα ελευθερώσει την μνήμη και ακόμα αν στο επόμενο request σερβίρει μιά εικόνα θα χρησιμοποιεί πάλι 30mb μνήμης. Σε ένα φυσιολογικό server αυτό δέν είναι πρόβλημα ωστόσο σε ένα απαιτητικό περιβάλλον δέν μπορούμε να σπαταλάμε μνήμη. Συμπληρωματικά πολλές βασικές διεργασίες του κάθε request δέν χρειάζονται για το σερβίρισμα στατικού περιεχομένου οπότε πάλι υπάρχει σπατάλη πόρων του συστήματος.</p>
<p>Η λύση που ανακάλυψα σε αυτό το πρόβλημα είναι η εξής. Χρησιμοποιούμε ένα web server για δυναμικό περιεχόμενο και έναν για στατικό. Έτσι &#8211; και στο ίδιο μηχάνημα &#8211; μπορούμε να βάλουμε έναν Apache με mod_rewrite, logging και ότι άλλο θέλουμε, και σε μιά άλλη ip βάζουμε έναν <a href="http://www.lighttpd.net/">lighttpd</a> με απενεργοποιημένα όλα τα modules για να σερβίρει το στατικό περιεχόμενο. Φυσικά αν όλο αυτό σας φαίνεται δύσκολο μπορείτε απλώς να χρησιμοποιήσετε μια υπηρεσία σαν το <a href="http://aws.amazon.com/ec2/">amazon ec2</a> για να κάνετε hosting το στατικό περιεχόμενο</p>
<p>Η συγκεκριμένη λύση βοήθησε το <a href="http://www.webdigity.com/">webdigity</a> να αντέξει ένα digg/stumbleupon/reddit κύμα που δέχτηκε με 1600 online visitors χωρίς κανένα πρόβλημα (ενώ παλιότερα έτρεχα με τα restart)</p>
<h3>MySQL</h3>
<p>Στην MySQL όπως και σε κάθε server το πιό βασικό είναι το configuration. Ένα πολύ καλό εργαλείο που μπορεί να σας βοηθήσει είναι το <a href="http://wiki.mysqltuner.com/MySQLTuner">MySQLTuner</a> το οποίο βοηθάει στο στήσιμο του server. Παράλληλα κάτι που πρέπει οπωσδήποτε να βλέπετε είναι τα queries που καθυστερούν με το <a href="http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html">slow query log</a>. Όσο αφορά τα queries το πιό βασικό που πρέπει να σας πώ είναι να αποφεύγετε τα RAND() και να χρησιμοποιείτε οπωσδήποτε την LIMIT.</p>
<h3>PHP opcode caching</h3>
<p>Το opcode caching μπορεί να κάνει την php πολλές φορές πιό γρήγορη και το συνιστώ ανεπιφύλαχτα. Υπάρχουν διάφορες λύσεις για opcode caching. Εγώ θα σας προτείνω την <a href="http://xcache.lighttpd.net/">XCache</a> που είναι stable και φυσικά <a href="http://humanworks.gr/blog/open-source/">open source</a> <img src='http://humanworks.gr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>PHP data caching</h3>
<p>Για να &#8220;ξεκουράζουμε&#8221; τον database server καλό είναι να κάνουμε και ένα caching των δεδομένων σε επίπεδο εφαρμογής. Αυτό μπορεί να γίνει σε αρχεία στο file system (<a href="http://www.webdigity.com/index.php?action=tutorial;code=5">δείτε ένα tutorial</a> που έγραψα παλιότερα) ή με την χρήση του <a href="http://www.danga.com/memcached/">memcached</a>.</p>
<p>Αυτά τα λίγα για server optimisation, ελπίζω να σας άρεσε το άρθρο <img src='http://humanworks.gr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><small>[<a href="http://flickr.com/photos/mayhem/2939259129/">photo credit</a>]</small></p>
]]></content:encoded>
			<wfw:commentRss>http://humanworks.gr/tutorials/%ce%b7-%ce%ac%cf%83%cf%87%ce%b7%ce%bc%ce%b7-%cf%80%ce%bb%ce%b5%cf%85%cf%81%ce%ac-%cf%84%ce%bf%cf%85-traffic/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Securing PhP, τα βασικά</title>
		<link>http://humanworks.gr/php/securing-php-%cf%84%ce%b1-%ce%b2%ce%b1%cf%83%ce%b9%ce%ba%ce%ac/</link>
		<comments>http://humanworks.gr/php/securing-php-%cf%84%ce%b1-%ce%b2%ce%b1%cf%83%ce%b9%ce%ba%ce%ac/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 14:22:21 +0000</pubDate>
		<dc:creator>Νίκος Παπανώτας</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://humanworks.gr/?p=140</guid>
		<description><![CDATA[Σήμερα είπα να γράψω κάτι διαφορετικό, έτσι πρίν συνεχίσουμε με τις αγοροπωλησίες domain θα ασχοληθούμε λίγο με την πιο δημοφηλή γλώσσα για διαδυκτικές εφαρμογές, την PhP και συγκεκριμένα με το πώς μπορούμε να ασφαλίσουμε τις εφαρμογές μας.
Γενικά περι ασφάλειας
Αρχικά πρέπει να πούμε κάποια πράγματα γενικά. Το θέμα &#8220;ασφάλεια&#8221; είναι κάτι πολύ υποκειμενικό και ποτέ δέν [...]]]></description>
			<content:encoded><![CDATA[<p>Σήμερα είπα να γράψω κάτι διαφορετικό, έτσι πρίν συνεχίσουμε με τις <a href="http://humanworks.gr/tutorials/%ce%b1%ce%b3%ce%bf%cf%81%ce%ac%ce%b6%ce%bf%ce%bd%cf%84%ce%b1%cf%82-domain-names/">αγοροπωλησίες domain</a> θα ασχοληθούμε λίγο με την πιο δημοφηλή γλώσσα για διαδυκτικές εφαρμογές, την PhP και συγκεκριμένα με το πώς μπορούμε να ασφαλίσουμε τις εφαρμογές μας.</p>
<h3>Γενικά περι ασφάλειας</h3>
<p>Αρχικά πρέπει να πούμε κάποια πράγματα γενικά. Το θέμα &#8220;ασφάλεια&#8221; είναι κάτι πολύ υποκειμενικό και ποτέ δέν υπάρχει 100% διασφάλιση. Για να λέμε τα πράγματα όπως έχουν, είναι γεγονός πως σε γενικές γραμμές άν κάποιος σε βάλει στο μάτι συνήθως είναι εφικτό να προσπεράσει οποιαδήποτε δικλείδα ασφαλείας και αν έχουμε θέσει.</p>
<p>Αυτό μπορεί να συμβαίνει για πολλούς λόγους. Θα προσπεράσω τους λόγους όπως πχ. οτι έχουμε παλιό software (web servers, database servers, κτλ) και θα εστιάσω καθαρά στο θέμα του web developer:</p>
<ol>
<li>Όσο καλός web developer και άν είναι κάποιος &#8211; και βάζω και τον εαυτό μου στην λίστα &#8211; σίγουρα δέν είναι ειδικός ασφαλείας πληροφοριακών συστημάτων.</li>
<li>Προσθέτουμε στο παραπάνω οτι κανείς php developer δέν γνωρίζει επ&#8217; ακριβώς πώς δουλεύει εσωτερικά η php, μιά και που δέν είναι αυτη η δουλειά του. Αυτό ωστόσο μπορεί να δημιουργήσει προβλήματα.</li>
<li>Οι ανάγκες και οι προθεσμίες που θέτουν οι πελάτες ποτέ δέν λαμβάνουν υπ&#8217;όψιν τον παράγοντα &#8220;ασφάλεια&#8221; και εδώ ίσως φταίμε που δέν ενημερώνουμε σωστά τους πελάτες μας.</li>
</ol>
<p>Προσωπικά έχω αντιμετωπίσει πολλές φορές προβλήματα ασφαλείας, και μάλιστα πρόσφατα πέσαμε θύμα ενός απο τα μεγαλύτερα botnets το οποίο ακόμα δέν είμαι σίγουρος αν έχουμε αντιμετωπίσει επαρκώς. Αυτό κυρίως γιατί το συγκεκριμένο botnet μπορεί να χρησιμοποιήσει με αυτόματο τρόπο πολλαπλά exploits και ουσιαστικά δέν ξέρεις απο πού έρχεται το πρόβλημα κάθε φορά. Αυτή την φορά την &#8220;πατήσαμε&#8221; γιατί απλούστατα όπως και σε κάθε server και στον δικό μας υπήρχαν μή ενημερωμένα software. Πάμε όμως να δούμε κάποια πράγματα που πρέπει να γνωρίζουμε όταν γράφουμε εφαρμογές σε Php και τα πιό απλά &#8211; αλλά και πιό συνηθησμένα &#8211; προβλήματα ασφαλείας που μπορεί να προκύψουν.</p>
<h3>SQL Injection attack</h3>
<p>To SQL injection θεωρείται ίσως ως ο πιό απλός τρόπος για να hackέψεις ένα site και γενικά οι περισσότεροι developers &#8211; αν όχι όλοι &#8211; το γνωρίζουν. Ωστόσο γνωρίζατε οτι μια εντολή σαν την <a href="http://www.webdigity.com/php-manual/function.addslashes.html">addslashes()</a> δέν είναι αρκετή για να μας σώσει;</p>
<p>Προτού συνεχίσουμε να εξηγήσουμε λίγο τί είναι το SQL injection. To σενάριο είναι το εξής:</p>
<ul>
<li>Η εφαρμογή χρησιμοποιεί κάποια $_GET ή $_POST μεταβλητή για να λάβει δεδομένα απο τον SQL server (mysql, oracle, sybase, κτλ)</li>
<li>Ο επιτηθέμενος την &#8220;πειράζει&#8221; ωστε να αλλάξει το query ή να τρέξει και κάποιο άλλο query (στην mysql γίνεται κυρίως με UNION() )</li>
</ul>
<p>Δέν θα επεκταθώ στο πώς γίνεται μια και που το <a href="http://www.google.gr/search?q=sql+injection">google</a> μπορεί να σας δώσει όλες τις απαραίτητες πληροφορίες <img src='http://humanworks.gr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Το ουσιαστικό με αυτή την μορφή επίθεσης είναι οτι πρέπει ουσιαστικά να μήν επιτρέπουμε τον χαρακτήρα quote (&#8216;) να μπεί σε ένα query απο τον χρήστη. Για αυτό οι περισσότεροι developers χρησιμοποιούν την addslashes() η οποία με τις κατάλληλες συνθήκες <a href="http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html">μπορεί να προσπεραστεί</a>&#8230;.</p>
<p>Για αυτό πρέπει να χρησιμοποιούμε την mysql_real_escape_string()</p>
<h3>File system attacks</h3>
<p>Μιά άλλη κλασσική μέθοδος είναι τα remote includes. Για παράδειγμα έχουμε τον παρακάτω κώδικα:</p>
<pre class="brush: php;">

&lt;?php

include $_GET['action'];

?&gt;
</pre>
<p>Αυτό που ενδεχομένως δέν γνωρίζουμε, είναι πως ο επιτηθέμενος μπορει στο $_GET['action'] να δώσει ένα url (πχ. απο ένα file browser script) και να πάρει full access στο μηχάνημα, ή έστω στο directory του site μας εφόσον παίζουμε σε safe_mode</p>
<p>Η σωστή έκδοση για το παραπάνω θα ήταν :</p>
<pre class="brush: php;">

&lt;?php

include '/some/path/' . $_GET['action'] . '.php';

?&gt;
</pre>
<p>ή ακόμα καλύτερα :</p>
<pre class="brush: php;">

&lt;?php

switch ( $_GET['action'] ){

case 'x' : include 'x.php'; break;

case 'y' : include 'y.php'; break;

....

}

?&gt;
</pre>
<h3>XSS attacks</h3>
<p>To XSS ή αλλιώς cross site scripting, είναι η τεχνική κατα την οποία ο χρήστης βάζει κάποιο &#8211; javascript συνήθως &#8211; html σε δεδομένα που εμείς θα εμφανίσουμε αργότερα στο site. Ένα απο τα χαρακτηριστηκότερα παραδείγματα ήταν όταν στο myspace καταφέραν κάποιοι να φορτώσουν σε αρκετά profiles ένα flash το οποίο χρησιμοποιόντας το session του επισκέπτη του profile έκανε κάποια πράγματα στο myspace (πχ. έστελνε ένα shout σε όλους τους φίλους σου)</p>
<p>Για να αποφύγουμε κάτι τέτοιο καλό είναι να μετατρέπουμε ότι δεδομένα μας δίνει ο χρήστης με την function htmlentities()</p>
<h3>Πώς να έχουμε το κεφάλι μας ήσυχο</h3>
<p>Όπως είπαμε και παραπάνω η ασφάλεια είναι ένα μεγάλο ζήτημα, ωστόσο υπάρχουν κάποια πράγματα που μπορούμε να κάνουμε και να είμαστε πιό ασφαλείς:</p>
<ol>
<li>Κάνουμε subscribe στα releases απο τα open source software που χρησιμοποιούμε. Είναι γνωστό οτι δημοφηλή projects όπως το wordpress, το joomla και άλλα, βγάζουν ενημερώσεις ασφαλείας πολύ συχνά. Σε αυτές τις περιπτώσεις επειδή είναι συχνά τα μαζικά exploits, η άμεση ενημέρωση είναι αναγκαία.</li>
<li>Ενημερωνόμαστε απο κοινότητες που ασχολούνται με την <a href="http://www.s3cure.gr/">ασφάλεια πληροφοριακών συστημάτων</a>.</li>
<li><a href="http://sectools.org/web-scanners.html">Σκανάρουμε τις εφαρμογές</a> μας πρίν τις βγάλουμε στον αέρα.</li>
<li>Χρησιμοποιούμε <a href="http://www.hardened-php.net/suhosin/">κάποιο module</a> που μπορεί να μας βοηθήσει.</li>
</ol>
<p>Ξέχασα κάτι; Αν ναί μήν διστάζετε να αφήσετε ένα σχόλιο. Καλώς η κακώς η ασφάλεια είναι κάτι που πρέπει να κοιτάξουμε ώς κλάδος και όχι μεμονομένα. Ελπίζω το σημερινό άρθρο &#8211; αν και διαφορετικό απο τα συνηθησμένα &#8211; να σας άρεσε.</p>
]]></content:encoded>
			<wfw:commentRss>http://humanworks.gr/php/securing-php-%cf%84%ce%b1-%ce%b2%ce%b1%cf%83%ce%b9%ce%ba%ce%ac/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Bookmarlet για twitter</title>
		<link>http://humanworks.gr/uncategorized/bookmarlet-%ce%b3%ce%b9%ce%b1-twitter/</link>
		<comments>http://humanworks.gr/uncategorized/bookmarlet-%ce%b3%ce%b9%ce%b1-twitter/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 11:07:12 +0000</pubDate>
		<dc:creator>Νίκος Παπανώτας</dc:creator>
				<category><![CDATA[blogging]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[διάφορα]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://humanworks.gr/?p=72</guid>
		<description><![CDATA[Πρόσφατα διαπίστωσα οτι δέν υπάρχει κάποιο bookmarlet για twitter σαν αυτά που χρησιμοποιούμε για digg, facebook, κτλ. Για να είμαι ειληκρινής δέν έψαξα και πολύ μια και που το να κάνεις ένα μόνος σου είναι σχετικά εύκολο.
Το παρακάτω παράδειγμα είναι για wordpress, ωστόσο είναι πολύ εύκολο να το προσαρμόσετε σε οποιοδήποτε CMS. Λοιπόν έχουμε και [...]]]></description>
			<content:encoded><![CDATA[<p>Πρόσφατα διαπίστωσα οτι δέν υπάρχει κάποιο bookmarlet για twitter σαν αυτά που χρησιμοποιούμε για digg, facebook, κτλ. Για να είμαι ειληκρινής δέν έψαξα και πολύ μια και που το να κάνεις ένα μόνος σου είναι σχετικά εύκολο.</p>
<p>Το παρακάτω παράδειγμα είναι για wordpress, ωστόσο είναι πολύ εύκολο να το προσαρμόσετε σε οποιοδήποτε CMS. Λοιπόν έχουμε και λέμε:</p>
<p>Ανοίξτε απο τον κατάλογο με το θέμα που χρησιμοποιείτε (/wp-content/themes/&#8230;) το αρχείο single.php. Εκεί που θέλετε να προστεθεί ο κώδικας για το twitter προσθέστε τα παρακάτω:</p>
<pre class="brush: php;">
&lt;?php
$twit = get_the_title();
$turl = file_get_contents('http://th8.us/api.php?url=' . urlencode(get_permalink()));
if ( (strlen(utf8_decode($twit)) + strlen($turl)) &gt; 139 )
substr($twit, 0, (136 - strlen($turl))) . '... ' . $turl ;
else
$twit .= ' ' . $turl;
echo '&lt;a href=&quot;http://twitter.com/home?status=', $twit , '&quot;&gt;Twitter&lt;/a&gt;';
?&gt;
</pre>
<p>Update : Δέν δουλεύει σωστά με ελληνικά URL. Το διορθώνω</p>
<p>Update: Τώρα δουλεύει άψογα. Απ&#8217;ότι φένεται το tinyurl έχει πρόβλημα οπότε χρησιμοποίησα άλλη υπηρεσία</p>
<p>Happy twitting <img src='http://humanworks.gr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://humanworks.gr/uncategorized/bookmarlet-%ce%b3%ce%b9%ce%b1-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
