<?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; security</title>
	<atom:link href="http://humanworks.gr/blog/security/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>Νέο security update απο το WordPress</title>
		<link>http://humanworks.gr/blogging/%ce%bd%ce%ad%ce%bf-security-update-%ce%b1%cf%80%ce%bf-%cf%84%ce%bf-wordpress/</link>
		<comments>http://humanworks.gr/blogging/%ce%bd%ce%ad%ce%bf-security-update-%ce%b1%cf%80%ce%bf-%cf%84%ce%bf-wordpress/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 19:36:15 +0000</pubDate>
		<dc:creator>Νίκος Παπανώτας</dc:creator>
				<category><![CDATA[blogging]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://humanworks.gr/?p=153</guid>
		<description><![CDATA[Μετά το wordpress 2.6.3 ακόμα ένα security update βγαίνει για το wordpress. Το vurnerability αφορά κυρίως εγκαταστάσεις σε Apache 2.x web servers με virtual hosts. Σύμφωνα με το changelog απο το 2.6.3 μόνο τα παρακάτω αρχεία χρειάζονται update :

/wp-includes/post.php
/wp-includes/version.php
/wp-includes/feed.php
/xmlrpc.php
/wp-admin/users.php

Οπότε τρεχάτε ποδαράκια μου πρίν βγεί το επόμενο exploit  
]]></description>
			<content:encoded><![CDATA[<p>Μετά το <a href="http://humanworks.gr/blogging/wordpress-263-security-fix/">wordpress 2.6.3</a> ακόμα ένα <a href="http://wordpress.org/development/2008/11/wordpress-265/">security update</a> βγαίνει για το wordpress. Το vurnerability αφορά κυρίως εγκαταστάσεις σε Apache 2.x web servers με virtual hosts. Σύμφωνα με το <a href="http://trac.wordpress.org/changeset?old_path=tags%2F2.6.3&amp;old=&amp;new_path=tags%2F2.6.5&amp;new=">changelog</a> απο το 2.6.3 μόνο τα παρακάτω αρχεία χρειάζονται update :</p>
<ol>
<li>/wp-includes/post.php</li>
<li>/wp-includes/version.php</li>
<li>/wp-includes/feed.php</li>
<li>/xmlrpc.php</li>
<li>/wp-admin/users.php</li>
</ol>
<p>Οπότε τρεχάτε ποδαράκια μου πρίν βγεί το επόμενο exploit <img src='http://humanworks.gr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://humanworks.gr/blogging/%ce%bd%ce%ad%ce%bf-security-update-%ce%b1%cf%80%ce%bf-%cf%84%ce%bf-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</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>
	</channel>
</rss>
