nedir

Biraz uğraştırıcı yada sıkıcı bir yol olabilir ama ile istediğimiz sitenin kaynak kodlarını alabiliriz .

<? $sayfa="http://www.deneme.net"; $kaynak=file_get_contents($sayfa); echo "<textarea cols='400' rows='20'>".$kaynak."</textarea>"; ?>

Cols='400' rows='20' üzerinde değişiklik yaparak istediğiniz sütun sıralarda görüntüleyebilirsiniz

kaynak: ordan burdan

Bugünde basit ama yararlı bir konu ele alalım. 'de 4.0.1 'den sonra değişkenlere fonksiyon atayabiliyorsunuz. Bu işlem için create_function() fonksiyonunu kullanabilirsiniz. Basit bir örnekle başlayalım:

$carpim_yazdir = create_function('$x,$y','echo $x * $y;');
$carpim_yazdir(5,2);

create_function 'ı eval 'e benzetebilirsiniz. Yanlız unutmayın create_function bir fonksiyonken eval bir dil yapısıdır. Belki create_function ile neler yapabileceğinizi gözünüzde canlandıramadıysanız daha komplek bir örnek vereyim.

$arama = create_function('$anahtar,$array,&$bul','global $bul; foreach ($array as $ => $value) { if (str_pos($value,$anahtar)!==false) $bul[] = $value; }');
$ara = array ( ' bir dildir.',
' ile nızı kolaylaştırın.',
'Asp bizi ilgilendirmez.',
'Ama perli de severiz.' );

function bul_yazdir($ara,$anahtar,$arama_fonksiyonu) {
$bul = array();
$arama_fonksiyonu($anahtar,$ara,$bul);
foreach ($bul as $value) {
echo '- '.$value.'<br />';
}
}

bul_yazdir($ara,'',$arama);

Burda basit bir arama fonksiyonu yazdım, altına da basit normal bir fonksiyon koydum ki farkı görün. Değişken fonksiyonların iyi tarafı bu fonksiyonları serialize edip oturumda veya bir dosyada saklayabilir daha sonra tekrar kullanabilirsiniz. Bir diğer kullanımı da callback (geri çağırım) fonksiyonları ile kullanmaktır. Buna da bir örnek verelim çünkü bu kullanım çok önemlidir. Yukarıdaki betiğin callback ile yazılmış halini aşağıda görelim:

$anahtar = '';
$ara = array ( ' bir dildir.',
' ile nızı kolaylaştırın.',
'Asp bizi ilgilendirmez.',
'Ama perli de severiz.' );
$bul = array();
$arama = create_function('&$deger,$indeks', 'global $anahtar; if (strpos($deger,$anahtar)) {global $bul; $bul[] = $deger; }');
$ara_ve_yazdir = create_function('&$deger,$indeks', 'global $anahtar; if (strpos($deger,$anahtar)) echo $deger.'<br />'; ');
array_walk($ara, $arama);
echo '<pre>',print_r($bul,true),'

kaynak: ordan burdan

function dosya_indir($link,$name=null)
{

$link_info = pathinfo($link); //Yol bilgilerini değişkene atıyoruz.
$uzanti = strtolower($link_info['extension']); //Dosyanın uzantısını değişkene atıyoruz.
$file = ($name) ? $name.'.'.$uzanti : $link_info['basename']; //Eğer edilmek üzere dosya adı girilmişse, girilen dosya adını değişkene atıyouruz, girilmemişse orjinal adını değişkene atıyoruz.

$curl = curl_init($link);
$fopen = fopen($file,'w');

curl_setopt($curl, CURLOPT_HEADER,0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_0);
curl_setopt($curl, CURLOPT_FILE, $fopen);

curl_exec($curl);
curl_close($curl);
fclose($fopen);

}

dosya_indir('http:///a.');
dosyasının bulunduğu dizine orjinal adında yani [a.] şeklinde dosyayı eder.

dosya_indir('http:///a.','dosya_adi',);
dosyasının bulunduğu dizine 2. parametre yani [dosya_adi.] şeklinde dosyayı eder.

kaynak: ordan burdan

1. KARAKTER NİTELİKLER
CHAR

Belirli sayıdaki karakteri saklamak için kullanılır.
Şayet saklanan değer mlanan genişlikten kısa ise, karakter kümesinin sağ tarafına mlı genişliğe gelene kadar MySQL tarafından boşluk karakteri eklenir.
Örneğin, CHAR(5) mlamasını, bu alanda daima 5 karakter uzunluğundaki değerleri saklamak istediğimizde kullanırız. Şayet bu alana "ABC" karakter kümesi eklenecek olursa veritabanında saklanma şekli "ABC "dir.
VARCHAR

Değişken sayıdaki karakterleri saklamak için kullanılır.
Nitelik mlamasında girilen değer saklanacak en büyük karakter uzunluğudur.
MySQL 4.1 belirtimlerine göre bir VARCHAR alan en çok 255 karakter (1 byte=28) saklayabilir, ancak MySQL 5'ten sonra 255 ya da 65535 (2 byte) karakter saklayabilirsiniz.
Şayet mlanandan (n olsun) daha uzun bir karakter kümesi girme girişiminde bulunursanız ilk n karakteri veritabanına kaydedilecek geri kalan karakterleri kaybetmiş olacaksınızdır.
2. SAYISAL NİTELİKLER

TINYINT

Belirli genişlikte ikili saklar, her zaman 1 byte'dır.
Yukarıdaki ifadenin pratikteki anlamı tinyint alanda en fazla 255 (28-1) sayının saklanabileceğidir.
Şayet sütunu SIGNED olarak mlamışsanız, saklanabilecek en büyük pozitif sayı 127, en küçük negatif sayı da -127 olur; 0(sıfır)'ı da sayarsanız 255 sayı mlamış oluruz.
Öte yandan değerlerinizin işaretinin aynı olacağını biliyorsanız, sütunu UNSIGNED yaparak; en büyük pozitif sayı limitini 255'e taşıyabilirsiniz.
SMALLINT

Belirli genişlikte ikili saklar, her zaman 2 byte'dır.
SIGNED özelliği ile saklanabilecek en büyük pozitif sayı , en küçük negatif sayı da -32767.
UNSIGNED olarak en büyük (28*28)-1 = (32767*2)-1 = 65'535 olur.
MEDIUMINT

Belirli genişlikte ikili saklar, her zaman 3 byte'dır.
SIGNED özelliği ile saklanabilecek en büyük pozitif sayı 9'199'871, en küçük negatif sayı da -9'199'871.
UNSIGNED olarak en büyük (28*28*28)-1 = 18'399'743 olur.
INT

Belirli genişlikte ikili saklar, her zaman 4 byte'dır.
SIGNED özelliği ile saklanabilecek en büyük pozitif sayı 2'147'483'647, en küçük negatif sayı da -2'147'483'647.
UNSIGNED olarak en büyük (28*28*28*28)-1 = 4'294'967'295 olur.
BIGINT

Belirli genişlikte ikili saklar, her zaman 8 byte'dır.
Yine benzer şekilde, UNSIGNED olarak (28*28*28*28*28*28*28*28)-1 = 18'446'744'073'709'551'616 sayısı saklanabilir; şayet SIGNED olarak kullanacaksanız da bunun yarısı kadar bir değer tutabilirsiniz.
2. ZAMANSAL NİTELİKLER

DATE

Veritabanında saklanma şekli 3 byte'dır.
saklamak için kullanılır.
En az etkili (significant) basamak en önce saklanır; yani varsayılan depolama biçimi 'yyyy-aa-gg' dir (y: yıl, a: ay, g:gün)
DATETIME

Veritabanında saklanma şekli 8 byte'dır.
zamanı saklamak için kullanılır.
Varsayılan depolama biçimi 'yyyy-aa-gg SS:dd:ss' dir. (y: yıl, a: ay, g:gün, S: saat, d: dakika, s: saniye)
TIME

Veritabanında saklanma şekli 3 byte'dır.
Zamanı saklamak için kullanılır.
Varsayılan depolama biçimi 'SS:dd:ss' dir. (y: yıl, a: ay, g:gün, S: saat, d: dakika, s: saniye)
TIMESTAMP

Varsayılan depolama şekli 4 byte'dır. Bir UNIX fonksiyonu olan time() fonksiyonu ile aynı işi yapar.
Epoch ismi verilen (00:00:00 UTC, Ocak 1, 1970) tarihinden o ana kadarki zaman uzaklığı saklayabilen bir alandır.
YEAR

UNSIGNED TINYINT gibi saklanır.
Farkı ise YEAR alanının 1901 ötelenmiştir. (YEAR) 0 = 1901 olarak düşünülebilir.
Bazı İpuçları

Veritabanı alanlarınızın niteliklerini mlarken, gereksinimlerinizi mutlaka belirleyiniz. Örneğin üye sıra no tutacak bir alan mlarken yaklaşık ne kadar üyeniz olacağını düşününüz; 100 kişi civarında bir üye potansiyeli öngörüyorsanız bunun için BIGINT mlamayınız, bu ciddi performans israfıdır.
Veritabanında saklayacağınız verileri mutlaka veri tipine uygun mlanmış alanlarda saklayınız. Sadece rakamlardan oluşacak bir alanı ya da tipinde bir veriyi asla asla VARCHAR tipinde saklamayınız; bu veritabanının sizin veritipine özel sunduğu bir çok özellikten (Sıralama seçeneği esneklikleri gibi) feragat etmektir.
Veritabanında bir işlemin yapılma zamanını girecekseniz,yani o anki zamana ihtiyacınız varsa bunun için kodunuz içinde date() fonksiyonu ile o anki zamanı oluşturup girmenize gerek yoktur, zaten MySQL'de NOW() diye bir fonksiyon vardır, çoğu kişinin farkında olmadığı.
son olarak -kendimi yineliyor gibi olacağım ama- veritabanı tasarımı gerçekten önemli bir iştir, bir uygulama yazmadan veritabanı tasarımına yeterli zamanı ayırınız.

kaynak: ordan burdan

dizinin istenilen yerinden istenilen kadar elaman yazma fonksiyonu

1.parametre dizinin kaçıncı elamanıdan başlayacak
2.parametre kaç yazılacak
3.parametre yazılacak değer

<?
$a = array_fill(5, 6, 'banana');
print_r($a);
?>

sonuç

Array
(
[5] => banana
[6] => banana
[7] => banana
[8] => banana
[9] => banana
[10] => banana
)

kaynak: ordan burdan

1.paramatre de belirtilen dizideki elamanlarla
2.paramatre deki dizideki elamanlarla şılaştırır
farklı olanları gösterir

<?
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);

print_r($result);
?>

sonuç :1.dizideki blue 2.dizide yok
Array
(
[1] => blue
)

kaynak: ordan burdan

function cache_check ($file = 'cachefile') {
global $cache,$rootpath,$cachesystem,$cacheident;
if ($cachesystem == 'yes') {
$cachefile = $rootpath.$cache . '/'.$file.'-'.$cacheident.'.';
$cachetime = 120 * 60; // 2 Hours
$updatetime = $cachetime / 60 / 60;
if (file_exists($cachefile) && (TIMENOW - $cachetime < filemtime($cachefile)))
{
include_once($cachefile);
print("<p align=center><font class=small color=red><b>This content was last cached on ".date('Y-m-d H:i:s', filemtime($cachefile))." and updating every ".$updatetime." hours.</b></font></p>");
exit;
}
ob_start();
}else
return;
}

function cache_save ($file = 'cachefile') {
global $cache,$rootpath,$cachesystem,$cacheident;
if ($cachesystem == 'yes') {
$cachefile = $rootpath.$cache . '/'.$file.'-'.$cacheident.'.';
$fp = fopen($cachefile, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
ob_end_flush();
}else
return;
}
$cacheident = ($_SERVER['QUERY_STRING'] != '' ? md5($_SERVER['QUERY_STRING']) : 'noGet');

kaynak: ordan burdan

Internette dolaşan binlerce toplayan Robotlar xxx@abcd.com gibi bir adres gördüğü zaman hemen olarak Spam listesine kaydediyor ondan sonra her gün 10 larca nerden geldiğini kimin gönderdiğini bilmediğimiz birçoğu Reklam amaçlı Spam mailler alıyoruz.

Bunlardan korunmanın basit bir yolu adresini bu tür programlardan gizleyen bir kod

spamyok. olarak kaydedip rahatlıkla kullanabilirsiniz
<?
function no_spam($) {
$str = "";
$a = unpack("C*", $);
foreach ($a as $b)
$str .= sprintf("%%%X", $b);
return $str;
}

// uygulama
$ = no_spam("test@.com");
$link = "<a href="mailto:".$."">E-</a>";
echo $link;
?>

kaynak: ordan burdan

Basit Güvenliği:
script'lerinizin güvenli olduğundan emin olmanız için ilk olarak kuralları yerine getirmeniz gerekiyor: kullanıcı girdilerinin (input) filtrelenmesi çıktıların (output) kontrolü. Eğer bu ikisini doğru olarak yapmıyorsanız script'leriniz her zaman güvenlik problemleri ile şı şıya olacaktır. Bu makale'de bu iki işlem ile ilgili yapılması gerekenler anlatılıyor.

Bütün Girileri Filtreleyin:
Script'leriniz harici bir kaynaktan girdi okuduğunda, bu verinin tehlikeli olduğu varsayılmalı güvenilmemelidir. Güvenilmemesi gereken değişkenlerden bazıları: $_POST, $_GET, $_REQUEST hatta pek mümkün görünmese de önemli veriler içerebilecek olan $_SERVER .

Tehlikeli bir değişkenden gelen veriyi işlemlere tabi tutmadan önce ilk olarak önce onaylanamanız filtrelemeniz gerekmektedir. Onaylama işlemi ile sadece sizin istediğiniz verileri içerdiğinden emin olabilirsiniz. Örneğin bir eposta bilgisi bekliyorsanız, onay fonksiyon'unuz girilen verinin doğru bir eposta olup olmadığını kontrol etmeli.

Hemen basit bir örnekle açıklayalım. Aşağıdaki kodda ilk olarak $_POST değişkeninden e-posta adresini alıyorum sonra veriyi onaylama işlemine sokuyorum:

- Kodu:

<?
$eposta = $_POST['eposta']; # Burada veri hala TEHLİKELİ durumda

// Validate e-

if (valid_eposta($eposta) == false) {

// Geçerli bir adres değil

die('Geçerli bir eposta değil!');
}
?>

Veriyi kontrol ederek script'imize tehlikeli verilerin eklenmesi riski büyük ölçüde azaltılmış oldu. valid_eposta() fonksiyon'u PHPit Code Snippet veritabanında da bulunabilecek olan standart bir onay işlemidir.

Verimiz daha güvenli olsa da işimiz daha bitmedi çünkü hala veriyi MySQL veritabanına yerleştirmek istiyoruz bu işlemden önce de bazı kontroller yapmamız gerekiyor. tüm önemli karakterlerin escape edildiği mysql_real_escape_string() standart fonksiyon'unu sunar. Diğer bir yöntem ise SQL sorgusunda veriyi her zaman kesme imleri arasına yerleştirin.

Önceki örneğimize devam edelim:

- Kodu:

<?
$eposta = $_POST['eposta']; # Burada veri hala TEHLİKELİ durumda

// Validate e-

if (valid_eposta($eposta) == false) {

// Geçerli bir adres değil

die('Geçerli bir eposta değil!');
}

// eposta'nın veritabanı için güvenli hale getirilmesi

$eposta = mysql_real_escape_string($eposta);

// Artık güvenli!

?>

Artık elimizdeki eposta verisi veritabanına güvenli bir şekilde işlenebilir. Hatalardan kaçınmak için tehlikeli değişkenlere bir ön ek verilebilir, örneğin:

- Kodu:

<?
$t_eposta = $_POST['eposta']; # Tehlikeli

// Onay işlemi

$g_eposta = mysql_real_escape_string($d_eposta);
?>

Bu şekilde tehlikeli bir veriyi işleme sokarken ön tarafındaki t_ eklentisi ile hemen farkına varabilirsiniz.

Çıktıların filtrelenmesi
Girdilerde olduğu gibi dışarıya sunulan tüm verilerin de (güvenli olarak filtreleyip veritabanına işlediğiniz verilerin dahi) filtrelenmesi gerekmektedir.

Filtrelenmesi gereken en önemli şey probleme yol açabilecek olan tag'leridir. Bunu yapmanın en kolay yolu bütün 'i escape işlemine sokan htmlentities() fonksiyon'udur:

- Kodu:

<?
echo htmlentities($_GET['eposta']);
?>

Bu kod (saldırganın sayfalarınıza kodları eklemesine diğer kullanıcıların cookie'lerini çalmasını sağlayan) muhtemel XSS (çapraz betik çalıştırma - cross scripting) saldırılarını kaldırır. Eğer mümkünse, htmlentities fonksiyon'unun üçüncü argümanı'nı (encoding/charset tipi) da kullanmalısınız. 'da 'i escape işleminde düzgün encoding ayarı yapmadığı için XSS saldırısından etkileniyordu. bu açığı 1 aralık'ta kapattı. Basitçe, her zaman encoding tipini belirlemelisiniz:

- Kodu:

<?
echo htmlentities($_GET['eposta'], ENT_QUOTES, 'UTF-8');
?>

Eğer bütün tag'lerini filtrelemek istemiyorsanız, bazı tag'lere izin vermek istiyorsanız strip_tags() fonksiyon'unu kullanabilirsiniz. Fakat bu, <script> tag'lerini filtreleseniz dahi açıklarına şı bir güvenlik problemi içerebilir. ör ( <div onclick="alert('Hi!');"> .

Diğer bir yöntem de sadece sizin istediklerinizi filtrelemenize yarayacak kendi fonksiyon'unuzu yazmanız (veya internet'teki yüzlerce hazır fonksiyon'dan birini kullanmanız). Bu bazen en iyi yöntem olabilir fakat herhangi bir şeyi unutmanız durumunda güvenlik problemlerine yol açabilir.

Son olarak, çıktıyı filtrelemenin en iyi yolu, üç argümanı ile birlikte htmlentities() fonksiyonunun kullanımı fakat bununda işlevi sınırlı (ör: formatlama olmaması) kalabilir. Buna çözüm olarak verileri format'lamanızda kullanılabilecek olan kendi kodunuzu yaratabilirsiniz. Kendi kodunuzu yaratma ile ilgili olarak Create your own BBCode, using dokümanına göz atabilirsiniz.

Sonuç :
Bu makalede programlamının iki ilkesi olan girdi filtreleme çıktı filtreleme'den bahsettim. Eğer bu ikisini doğru olarak yapabilirseniz çok güvenli bir script'ine doğru yola çıkmışsınız demektir.

Verdiğim örnekler çok basit hantal. Escape işlemini otomatikleştirmeniz iyi olabilir. Bunun için iyi bir yöntem gerekli işlemleri yapan bir class veya fonksiyon'lar yazmanız.

kaynak: ordan burdan

Tag Adı Kısa açıklaması
A Hiper bağ oluşturmak için kullanılır
ADDRESS mlar
AREA Resimlerin haritası çıkalırlır
B Yazıyı koyu yapar
BASE özel döküman
BASEFONT Font değeri ayarlama
BGSOUND Sayfaya için kullanılır
BIG Font büyüklüğünü artırma
BLOCKQUOTE Yazıyı belli miktarda sağda yazdırır
BODY Çeşitli etiketlerle kullanılır desen etiket v.s için
BR Satır sonu belirtmek için kullanılır
CENTER Yazıyı ortalamak için kullanılır
CITE İtalik yazı mlama
CODE Yazıyı genişleterek ilginç bir şekil verir
COMMENT Sayfa içinde açıklama yapma
DD Değişik listelendirme yapar
DFN İtalik yazıya dönüştürür
DL Listelendirme
DT Listelendirme
FONT Font tipini düzenleme
Bilgi alışverişi için oluşturur
FRAME Sayfada frame oluşturmak için kullanılır.
FRAMESET Frame oluşturmada kullanılan komut
Hn Başlıkları oluşturmada kullanılır.
HEAD Dökümanın mlama ü burada mlanır.
HR Yatay çizgi çizmek için kullanılır
Döküman başlangıcını sonunu belirtmek için kullanılır.
I İtalik yazı yapar
IMG Sayfaya eklemek için kullanılır
INPUT Formlarda bilgi girişini gösterir.
ISINDEX Arama için oluşturur
KBD Yazı boyutunu genişletir.
LISTING Yazıyı çok küçük hale getirir
MAP Resimlerin haritasını çıkarmada kullanılır.
MARQUEE Kayan yazı
MENU Listeyi belli oranda sağda görüntüler
NOFRAMES Frameleri desteklemeyen browserler için
OPTION Diyalog kutusu içinde seçim yapmayı sağlar
P Paragraf sonu belirtmek için kullanılır
PLAINTEXT Bu tagdan sonra yazılan herşey web sayfasında görünür.
PRE Yazıyı boşluklu aralıklı yazdırır
S Yazıyı ortadan çizer
SAMP Özel yazı kodu ile yazar
SELECT Menu seçimi sağlar
SMALL Çok Küçük yazı yazar
STRIKE Koyu yazı yazdırır
TABLE Tablo oluşturmak için kullanılır
TEXTAREA Küçük alanlara daha çok yazı yazmayı sağlayan text alanı
TITLE Dökümanın başlığını ifade eder
TT Değişik yazı
U Altı çizgili yazı

kaynak: ordan burdan

<STYLE TYPE="text/css"><!–
BODY {
scrollbar-arrow-color:blue;
scrollbar-track-color:green;
scrollbar-shadow-color:yellow;
scrollbar-face-color:orange;
scrollbar-highlight-color:violet;
scrollbar-darkshadow-color:orange;
scrollbar-3dlight-color:yellow;
}
//–></STYLE>

kaynak: ordan burdan

<input type=button value="Geri" onClick="history.go(-1)">

kaynak: ordan burdan

<hr width="750" size="1" color="#ffffff">

kaynak: ordan burdan

document.write("Kullanılan donanım : "+navigator.appName+" "+navigator.appVersion+"");

kaynak: ordan burdan

Public: Foknsiyona sınıf içinden sınıf dışından erişime izin verir.Ayrıca Kalıtım ile aktarılır.
Private: Bu erişim belirteci işaretlenen öğeye sadece sınıfın içinden erişilebileceği anlamına gelir. bu öğeler kalıtım yoluyla aktarılmaz..
Protected:Bu erişim belirteci işaratelenen ögeye sadece sınıfın içinden erişilebileceği fakat alt sınıflara aktarılabileceği anlamına gelmektedir.
Extends:Eğer sınıfımız başka bir sınıfın alt sınıfı olacaksa extends anahtar sözcüğü ile aktarılır

Kod:
<?
class deneme
{
public function fonksiyon1()
{
echo"public fonksiyonu çalıştırıldı<br>";
}

private function fonksiyon2()
{
echo"private fonksiyonu çalıştırıldı<br>";
}

protected function fonksiyon3()
{
echo"protected fonksiyonu çalıştırıldı<br>";
}

}[/p]
[p][/p]
[p]class deneme1 extends deneme
{
function __construct()
{
$this->fonksiyon1();
//$this->fonksiyon2();
$this->fonksiyon3();
}
}[/p]
[p]$b=new deneme1();
?>Kod:
<?
class deneme
{
var $attribute;
function __get($name)
{
$this->attribute=$name;
}

function __set($name, $value)
{

$this->$name=$value;
}

}[/p]
[p]class deneme1 extends deneme
{
var $attribute2;
function __set($name, $deger)
{
$this->$name=$deger;
}

function yazdir($nesne)
{
echo $this->$nesne;
}
}[/p]
[p]$b=new deneme1();
$b->__set('attribute',' de Sınıflara<br>');
$b->__set('attribute1', 'Merhaba');
$b->yazdir('attribute');
$b->yazdir('attribute1');[/p]
[p]?>

kaynak: ordan burdan

preg_match() Perl Uyumlu Düzenli Ifadeler (PCRE) fonksiyonlarindan biridir. Bu fonksiyon programciya
metin isleme konusunda diger metin fonksiyonlarindan daha çok esneklik saglar.

Preg_match() düzenli ifadeler kullanarak bir metin blogunu baska bir metnin içinde bulmak için
kullanilir.

Preg_match() 3 tane ifadeye ihtiyaç duyar. Bunlar
1. Düzenli ifade (regex)
2. Kaynak metin
3. Bir dizi degisken

Preg_match() sonuç olarak eslesen bir ifade varsa 1, eslesen bir ifade bulunamazsa 0 döndürür.

:

<?$kaynak= "Michael Jordan is a great ";
if(preg_match("/J.r/", $kaynak, $dizi))
print$dizi[0]
// Ekrana Jor yazdirir ?>

Burada düzenli ifademiz "/J.r/" metin içerisinde önce J, onu eden herhangi bir (1)
karakter (.) daha sonra bir r ariyor. Slash isaretleri ise (/) delimiter olarak adlandirilirlar
düzenli ifademizin sinirlarini belirlerler. Bir diger örnek ile devam edelim.

:

<?$kaynak = "Michael Jordan is a great ";
if(preg_match("/J.*n/", $kaynak, $dizi))
print$dizi[0]
// Ekrana Jordan yazdirir ?>

Bu örnekte ise önce bir J, ardinda herhangi bir (1) karakter, ardindan herhangi bir oranda herhangi
bir karakter son olarak da bir n ariyoruz metnimizin içinde. Bu durumda .* için "herhangi bir
oranda herhangi bir karakter" diyebiliriz.

Zaman zaman * yerine + kullanmak da tercih edilebilir. + "bir veya daha fazla karakter"
manasindadir. + * arasindaki fark ise +'nın 0'ı da içermesidir.
".*" = >=1
"+" = >=0

Düzenli ifadeler için açgözlüdür denebilir. Çünkü düzenli ifadeler aramanin ilk son sonucu
arasindaki her seyi bulmak isterler.

:

<?$metin= "string strong big stung";
If(preg_match("/s.*g/", $metin, $dizi))
Print$dizi[0];
// Ekrana string strong big stung yazdirir ?>

Eger sadece ilk bulunan ifadeyi istiyorsak bir ? eklememiz gerekir.

:

<?$metin= "string strong big stung";
If(preg_match("/s.*?g/", $metin, $dizi))
Print$dizi[0];
// Ekrana string yazdirir ?>

Bir metin içerisinde bizim kriterlerimize uygun olan tüm degerleri bir dizi içine atmak istersek
preg_match_all() fonksiyonunu kullanmamiz gerekir.

:

<?$metin= "string strong big stung";
If(preg_match_all("/s.*?g/", $metin, $dizi))
Echo"<pre>";
Printvar_dump($dizi);
Echo"</pre>";
/* Ekrana
array(1) {
[0]=>
array(3) {
[0]=>
string(6) "string"
[1]=>
string(6) "strong"
[2]=>
string(5) "stung"
}
}
Yazdirir */?>

Ayrica düzenli ifadeler içinde verilerin türlerini ifade eden karakterler kullanarak belirli
karakterleri arayabiliriz.

:

<?$metin= "Bugün 06-01-05";
If(preg_match("/d*-d*-d*/", $metin, $dizi))
Print$dizi[0];
//Ekrana 06-01-05 yazdirir ?>

Burada aramada d ondalik rakami ifade eder. Düzenli ifadelerle arama yaparken kullanilabilen veri
türleri içerdikleri degerler asagidaki listede gösterilmistir.

Ifade Tür Içerigi
d Ondalik Sayi [0-9]
D Ondalik olmayan herhangi bir karakter [^0-9]
s Bosluk karakter [

f]
S Bosluk karakteri disindaki herhangi bir karakter [^

f]
w "word" karakter [a-zA-Z0-9_]
W "non-word" karakter [^a-zA-Z0-9_]

kaynak: ordan burdan

<?
class zipfile
{
var $datasec = array(); // array to store compressed data
var $ctrl_dir = array(); // central directory
var $eof_ctrl_dir = "x50×4bx05×06x00×00x00×00"; //end of Central directory record
var $old_offset = 0;

function add_dir($name)
{
// adds "directory" to archive - do this before putting any files in directory!
// $name - name of directory… like this: "path/"
// …then you can add files using add_file with names like "path/file.txt"
$name = str_replace("", "/", $name);

$fr = "x50×4bx03×04";
$fr .= "x0ax00"; // ver needed to extract
$fr .= "x00×00"; // gen purpose bit flag
$fr .= "x00×00"; // compression method
$fr .= "x00×00x00×00"; // last mod time and date

$fr .= pack("V",0); // crc32
$fr .= pack("V",0); //compressed filesize
$fr .= pack("V",0); //uncompressed filesize
$fr .= pack("v", strlen($name) ); //length of pathname
$fr .= pack("v", 0 ); //extra field length
$fr .= $name;
// end of "local file header" segment

// no "file data" segment for path

// "data descriptor" segment (optional but necessary if archive is not served as file)

$fr .= pack("V",$crc); //crc32
$fr .= pack("V",$c_len); //compressed filesize
$fr .= pack("V",$unc_len); //uncompressed filesize

// add this entry to array
$this -> datasec[] = $fr;

$new_offset = strlen(implode("", $this->datasec));

// ext. file attributes mirrors MS-DOS directory attr byte, detailed
// at http://support..com/support…/Q125/0/19.asp

// now add to central record
$cdrec = "x50×4bx01×02";
$cdrec .="x00×00"; // version made by
$cdrec .="x0ax00"; // version needed to extract
$cdrec .="x00×00"; // gen purpose bit flag
$cdrec .="x00×00"; // compression method
$cdrec .="x00×00x00×00"; // last mod time & date
$cdrec .= pack("V",0); // crc32
$cdrec .= pack("V",0); //compressed filesize
$cdrec .= pack("V",0); //uncompressed filesize
$cdrec .= pack("v", strlen($name) ); //length of filename
$cdrec .= pack("v", 0 ); //extra field length
$cdrec .= pack("v", 0 ); //file comment length
$cdrec .= pack("v", 0 ); //disk number start
$cdrec .= pack("v", 0 ); //internal file attributes
$ext = "x00×00x10×00";
$ext = "xffxffxffxff";
$cdrec .= pack("V", 16 ); //external file attributes - 'directory' bit set

$cdrec .= pack("V", $this -> old_offset ); //relative offset of local header
$this -> old_offset = $new_offset;

$cdrec .= $name;
// optional extra field, file comment goes here
// save to array
$this -> ctrl_dir[] = $cdrec;
}
function add_file($data, $name)
// adds "file" to archive
// $data - file contents
// $name - name of file in archive. Add path if your want
{
$name = str_replace("", "/", $name);
//$name = str_replace("", "", $name);
$fr = "x50×4bx03×04";
$fr .= "x14×00"; // ver needed to extract
$fr .= "x00×00"; // gen purpose bit flag
$fr .= "x08×00"; // compression method
$fr .= "x00×00x00×00"; // last mod time and date

$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$zdata = substr( substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
$c_len = strlen($zdata);
$fr .= pack("V",$crc); // crc32
$fr .= pack("V",$c_len); //compressed filesize
$fr .= pack("V",$unc_len); //uncompressed filesize
$fr .= pack("v", strlen($name) ); //length of filename
$fr .= pack("v", 0 ); //extra field length
$fr .= $name;
// end of "local file header" segment

// "file data" segment
$fr .= $zdata;

// "data descriptor" segment (optional but necessary if archive is not served as file)
$fr .= pack("V",$crc); //crc32
$fr .= pack("V",$c_len); //compressed filesize
$fr .= pack("V",$unc_len); //uncompressed filesize

// add this entry to array
$this -> datasec[] = $fr;

$new_offset = strlen(implode("", $this->datasec));

// now add to central directory record
$cdrec = "x50×4bx01×02";
$cdrec .="x00×00"; // version made by
$cdrec .="x14×00"; // version needed to extract
$cdrec .="x00×00"; // gen purpose bit flag
$cdrec .="x08×00"; // compression method
$cdrec .="x00×00x00×00"; // last mod time & date
$cdrec .= pack("V",$crc); // crc32
$cdrec .= pack("V",$c_len); //compressed filesize
$cdrec .= pack("V",$unc_len); //uncompressed filesize
$cdrec .= pack("v", strlen($name) ); //length of filename
$cdrec .= pack("v", 0 ); //extra field length
$cdrec .= pack("v", 0 ); //file comment length
$cdrec .= pack("v", 0 ); //disk number start
$cdrec .= pack("v", 0 ); //internal file attributes
$cdrec .= pack("V", 32 ); //external file attributes - 'archive' bit set

$cdrec .= pack("V", $this -> old_offset ); //relative offset of local header
// &n // bsp; echo "old offset is ".$this->old_offset.", new offset is $new_offset<br>";
$this -> old_offset = $new_offset;

$cdrec .= $name;
// optional extra field, file comment goes here
// save to central directory
$this -> ctrl_dir[] = $cdrec;
}
function file() { // dump out file
$data = implode("", $this -> datasec);
$ctrldir = implode("", $this -> ctrl_dir);
return
$data.
$ctrldir.
$this -> eof_ctrl_dir.
pack("v", sizeof($this -> ctrl_dir)). // total # of entries "on this disk"
pack("v", sizeof($this -> ctrl_dir)). // total # of entries overall
pack("V", strlen($ctrldir)). // size of central dir
pack("V", strlen($data)). // offset to start of central dir
"x00×00"; // . file comment length
}
}
?>

ÖRNEK KULLANIMI
<?
$zipfile = new zipfile();

// Klasörünün İçinde Yeni Bir Klasör Oluşturmak İsterseniz
$zipfile -> add_dir("dir/");

// Klasörünün İçindeki Dosya İçeriği
$filedata = " klasörünün içindeki dosyaya yazmak istedikleriniz buraya";
$zipfile -> add_file($filedata, "dir/file.txt");

// Bu Klasörünü Etmek İçin
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=test.");
echo $zipfile -> file();

// Bu Klasörünü Sunucunuza Kaydetmek İçin
$filename = "output.";
$fd = fopen ($filename, "wb");
$out = fwrite ($fd, $zipfile -> file());
fclose ($fd);
?>

kaynak: ordan burdan

<table width="410" height="710" bgcolor="#000000" border="0" cellspacing="8" cellpadding="8" align="center">

<table width="400" height="700" bgcolor="#f4f4f4" border="0" cellspacing="8" cellpadding="8" align="center">
<td>
<center>
<?
# Resimleri cek
$dizin = " dizini( dosyası)";//Resminizin Bulunduğu Yolu Yazınız
$tutucu = opendir($dizin);
while($dosya = readdir($tutucu)){
if(is_file($dizin."/".$dosya))
$[] = $dosya;
}
closedir($tutucu);

# Ön bilgiler
$limit = 21; //Bir sayfada gösterilecek sayısı
$sf = $_GET["sf"];
if($sf < 1) $sf = 1;
$toplam = count($);

# Bu bilgiler doğrultusunda
$kactan = ($sf-1) * $limit;
$kaca = ($kactan+$limit);
if($kaca > $toplam) $kaca = $toplam;

# $kactan başlayıp $kaca kadar bas
for($i=$kactan; $i < $kaca; $i++){
echo"
<a href='".$dizin."/".$[$i]."' target='_blank'>
<img onContextMenu='return false' src='".$dizin."/".$[$i]."' width='100' height='100' border='0'></a>n";
}
echo" </br></br></br>";
# Birden başlayıp sayfa sayısı kadar link bas
for($i=1; $i < $toplam / $limit; $i++){
if($sf == $i)
echo"$in"; else
echo"<a href='.?sf=$i'>$i</a>n";
}
?>
</center><tr></td></tr></table>
<tr></td></tr></table>

—-
Not:
——————————

onContextMenu='return false'

bu kod resminizin kopyalanmasını engeller.
Dilerseniz kaldırabilirsiniz

kaynak: ordan burdan

FTP File Transfer Protocol (Dosya Transfer Protokolü) ünü temsil etmektedir.

Aşağıdaki sabitler FTP Modülü (FTP_ASCII, FTP_BINARY) kullanıldığı zaman mlıdırlar.
Bu komutların işlenebilmesi için scriptin başına

dl("php3_ftp.dll");

ifadesi eklenmelidir.

FTP Fonksiyonları :

ftp_connect : FTP bağlantısı açar.
ftp_login : Bir FTP bağlantısına login yapar.
ftp_pwd : O an içinde bulunulan klasör ü döndürür.
ftp_cdup : içinde bulunulan klasörü değiştirir.(bir üst klasöre geçer.)
ftp_chdir : FTP serverindaki klasörü değiştirir.
ftp_mkdir : Klasör yaratır.
ftp_rmdir : Klasör siler.
ftp_nlist : Verilen klasördeki dosyaların listesini döndürür.(listeyi bir diziye atar)
ftp_rawlist : Verilen klasördeki dosyaların detaylı listesini döndürür.
ftp_systype : Bağlanılan FTP serverinin sistem tipini döndürür.
ftp_pasv : Pasif modu veya kapama için kullanılır.
ftp_get : Bağlanılan FTP serverindan dosya alır.
ftp_fget : Bağlanılan FTP serverindan dosyayı alır açık olan bir dosyaya kaydeder.
ftp_put : Dosyayı FTP serverina upload eder.
ftp_fput : Açık olan bir dosyadan FTP serverina upload yapar.
ftp_size : Girilen dosyanın boyutunu döndürür.
ftp_mdtm : Girilen dosyanın son değiştirilme tarihini döndürür.
ftp_rename : FTP serverindaki bir dosyanın adını değiştirir.
ftp_delete : Girilen dosyayı FTP serveridan siler.
ftp_site : Servera bir komutu gönderir.
ftp_quit : FTP bağlantısını kapatır.

Örnek ftp uygulaması

ftp_connect : FTP bağlantısı yapar.

Kullanımı :

int ftp_connect(string host,int[port]);

Başarı durumunda ftp bağlantısı döndürür, durumunda False döndürür.

ftp_connect() belirtilen hosta FTP bağlantısı yapar.PORT parametresi bağlantı için alternatif bir port sağlar.Yazılmazsa veya 0 değeri verilirse , Default FTP portu olarak 21 kullanılır.

yukarı

ftp_login : Bir FTP bağlantısına login yapar.

Kullanımı :

int ftp_login(int ftp_bağlantısı, string kullanıcıadı, string şifre);

Başarı durumunda True, durumunda falase değerini döndürür.

ftp_login() verilen ftp bağlantısına login yapar.

yukarı

ftp_pwd : Serverda içinde bulunulan klasörü döndürür.
————-

Kullanımı :

int ftp_pwd(int ftp_bağlantısı);

başarı halinde içinde bulunulan klasörü halinde False döndürür.

yukarı

ftp_cdup : Serverda bir üst klasöre geçer.
————-

Kullanımı :

int ftp_cdup(int ftp_bağlantısı);

başarı halinde True, halinde False döndürür.

yukarı

ftp_chdir : Serverda belirtilen klasöre geçer.
————-

Kullanımı :

int ftp_chdir(int ftp_bağlantısı , string gidilecek_klasör);

Başarı halinde True, halinde False döndürür.

yukarı

ftp_mkdir : Serverda yeni bir klasör yaratır.
————-

Kullanımı :

string ftp_mkdir(int ftp_bağlantısı,string klasör_adı);

başarı halinde yeni bir klasör yaratılır, halinde False döndürür.

yukarı

ftp_rmdir : Serverda bir klasörü siler.
————-

Kullanımı :

int ftp_rmdir(int ftp_bağlantısı,string klasör_adı);

Başarı halinde True, halinde False döndürür.

yukarı

ftp_nlist : Verilen klasörde bulunan dosyaların listesini döndürür.
————-

Kullanımı :

int ftp_nlist(int ftp_baglantısı,string klasör_adı);

Başarı halinde elemanları dosyaadları olan bir dizi , halinde False döndürür.

yukarı

ftp_rawlist : Verilen klasörde bulunan dosyaların ayrıntılı listesini döndürür.
————-

Kullanımı :

int ftp_rawlist(int ftp_baglantısı, string klasör_adı);

ftp_rawlist() FTP LIST komutunu icra eder. sonuçları bir dizide döndürür.Her dizi elemanı text in bir satırına şılık gelmektedir.Ayrıca ftp_systype() ile döndürülen sistem tip belirteci sonuçların yorumlanması gerektigini saptamada kullanılabilir.

yukarı

ftp_systype : Bağlı bulunulan FTP serverinin sistem tip belirtecini döndürür.
————-

int ftp_systype(int ftp_baglantısı);

Başarı halinde sistem belirtecini, halinde False döndürür.

yukarı

ftp_pasv : Pasif modu açar veya kapar.
————-

Kullanımı :

int ftp_pasv(int ftp_baglantısı,int pasv);

Başarı halinde True, halinde False döndürür.

ftp_pasv() pasv parametresi True ise pasif modu açar.pasv parametresi False ise pasif modu kapar.

yukarı

ftp_get : Belirtilen dosyayı FTP serverindan alır.
————-

Kullanımı :

int ftp_get(int ftp_baglantısı, string local_file, string remote_file, int mode);

Başarı halinde True, halinde False döndürür.

ftp-get() komutu remote_file ile belirtilen dosyayı serverdan alır bilgisayara local_file
ile belirtilen isim ile kaydeder. mode parametresi FTP_ASCII veya FTP_BINARY olarak belirtilmelidir.

yukarı

ftp_fget : Belirtilen dosyayı FTP serverindan alır açık bir dosyaya kaydeder.
————-

Kullanımı :

int ftp_fget(int ftp_baglantısı, int fp, string remote_file, int mode);

Başarı halinde Trueihata halinde False döndürür.

ftp_fget() komutu remote_file ile belirtilen dosyayı serverdan alır fp, dosya belirteci ile verilen dosyaya kaydeder.mode parametresi FTP_ASCII veya FTP_BINARY den birisi olmalıdır.

yukarı

ftp_put : Bilgisayardan belirtilen dosyayı alır FTP serverına kaydeder.
————-

Kullanımı :

int ftp_put(int ftp_baglantısı, string remote_file,string local_file, int mode);

Başarı halinde True, halinde False döndürür.

ftp_put() bilgisayardan local_file ile belirtilen dosyayı alıp FTP serverina remote_file adıyla kaydeder.mode parametresi FTP_ASCII veya FTP_BINARY den birisi olmalıdır.

yukarı

ftp_fput : Bilgisayardan acık olan dosyayı alır FTP serverina kaydeder.
————-

Kullanımı :

int ftp_fput(int ftp_baglantısı, string remote_file, int fp, int mode);

Başarı halinde true, halinde False döndürür.

ftp_fput() fp ile belirtilen dosya belirteci ile gösterilen dosyadan dosyanın sonuna kadar olan veriyi FTP serverina upload eder. Dosya servera remote_file ile belirtilen ad ile kaydedilir.mode parametresi FTP_ASCII veya FTP_BINARY den birisi olmalıdır.

yukarı

ftp_size : Verilen dosyanın büyüklüğünü döndürür.
————-

Kullanımı :

int ftp_size(int ftp_baglantısı,string dosya_adı);

Başarı halinde dosyanın büyüklüğünü, halinde -1 değerini döndürür.

ftp_size() verilen dosyanın büyüklüğünü döndürür.Eğer bir oluşursa,mesela verilen dosya olmayabilir, -1 döndürür.Bütün serverlar bu fonksiyonu desteklememektedir.

yukarı

ftp_mdtm : Belirtilen dosyanın son değiştirilme tarihini döndürür.
————-

Kullanımı :

int ftp_mdtm(int ftp_baglantısı,string dosya_adı);

Başarı halinde bir UNIX timestamp ı, halinde -1 döndürür.
Bu fonksiyonu bütün serverlar desteklememektedir.

yukarı

ftp_rename : FTP serverindaki bir dosyanın adını değiştirir.
————-

Kullanımı :

int ftp_rename(int ftp_baglantısı,string dosya_adı,string yenidosya_adı);

Başarı halinde True, halinde False döndürür.

yukarı

ftp_delete : FTP serverinda belirtilen dosyayı siler.
————-

Kullanımı :

int ftp_delete(int ftp_baglantısı,string path);

Başarı halinde True, halinde False döndürür.

ftp_delete() FTP serverindan path parametresi ile belirtilen dosyayı siler.

yukarı

ftp_site : Servera bir komutu gönderir.
————-

Kullanımı :

int ftp_site(int ftp_baglantısı,string cmd);

Başarı halinde True, halinde False döndürür.

ftp_site() FTP serverina cmd ile belirtilen komutu gönderir.

yukarı

ftp_quit : FTP baglatısını kapatır.
————-

Kullanımı :

int ftp_quit(int ftp_baglantısı);

yukarı

ÖRNEK KOD :

<?

dl("php3_ftp.dll"); /*Scripte php3_ftp.dll dinamik kütüphane dosyasını
kullanmasını söylüyoruz.*/

$host="ftp.ornek.com";
$user="username";
$pass="password";

if (!$ftp=ftp_connect($host)) //ftp ye bağlanıyoruz.
{
echo $host ;
echo ("Bağlantı yapılamadı.");
exit;
}

if (!ftp_login($ftp,$user,$pass)) // username password giriyoruz.
{
echo ("Login yapılamadı.");
exit;
}

$local="main.htm";
$remote="index.htm";
ftp_get($ftp,$local,$remote,FTP_ASCII);

/* ftp_get kullanarak FTP serverindaki index.htm dosyasını ımıza main.htm olarak alıyoruz. ASCII modunda.*/

$local=deneme.htm;
$remote=ana.htm;
ftp_put($ftp,$remote,$local,FTP_ASCII);

/*ftp_put kullanarak ımızdaki deneme.htm dosyasını FTP serverina ana.htm adıyla upload ettik. ASCII modunda*/

$files=ftp_nlist($ftp,deneme);
$a=sizeof($files);
echo ("Deneme Klasöründeki Dosyaların Listesi");
echo"<br>";
for($i=0;$i<$a;$i++){
echo $files[$i];
echo"<br>";
}

/*ftp_nlist komutu ile FTP serverindaki deneme klasöründeki bütün dosyaları bir dizi halinde $files dizisine atadık.Daha sonra sizeof() fonksiyonuyla $files dizisindeki eleman sayısını öğreniyoruz yani kaç dosyamız olduğunu.Daha sonra for döngüsüyle bu dosyaların adlarını ekrana basıyoruz.*/

$dizin=ftp_pwd($ftp);
echo $dizin;

/*ftp_pwd komutu ile o anda içinde olduğumuz dizini öğrenip ekrana basıyoruz.*/

ftp_chdir($ftp,altklasör);

/*ftp_chdir() komutu ile FTP serverinda dizin değiştirip altklasör adlı dizine geçiyoruz*/

ftp_rename($ftp,index.htm,main.php3);

/*ftp_rename() komutu ile serverdaki index.htm dosyasının adını main.php3 olarak değiştirdik.*/

$sys=ftp_systype($ftp);
echo ("System type : ");
echo $sys;
echo "<br>";

/*ftp_systype() komutu ile FTP serverinin sistem tipini öğrendik.Burada eğer FTP serverimiz Unix sistem üzerindeyse ekrana UNIX yazacaktır.*/

ftp_quit($ftp); //ftp bağlantımızı kapattık.

?>

kaynak: ordan burdan

Son zamanlarda "RFI" (Remote File Include) tarzı yöntemlerle birçok hack olayı yaşanıyor birçok kişi bunların önlemini almakta çaresiz kalıyor bu yüzden gerek itibarlarından gerekse sitelerinden oluyorlar. "RFI" açıklarını engelleyemeyenler için bir döküman yazmaya verdim. Bu sayede "RFI" açığınız olsa bile en az zararla hatta "0" zararla kurtulacağınızı anlatacağım. Bu ayarlar sayesinde hem güvenliğinizi hem de performansınızı artırmış olacaksınız.

"phpi.ini" yapılandırmasına geçmeden önce sunucumuzda bulunan klasör dosya izinlerini "chmod" doğru şekilde ayarlayalım. Genelde FTP programlarında dosya yada klasör üzerine "sağ click" yapılıp yada "file" seçeneğinden "Change Attributes ya da Properties / CHMOD" seçeneklerinden düzenleriz burada "permissions" altında yani izinler altında önerilenleri girmek en uygunudur.

Klasörler için: 755
Dosyalar için: 644

İzinleri bu şekilde ayarlamanız güvenlik için ilk adımı atmanıza yardımcı olur.

".ini" yapılandırması:

Eğer server admini iseniz yani root yetkilere sahipseniz bu ayarları serverda bulunan tüm siteler için yapabilirsiniz genellikle "/usr/local/Zend/etc/" altında bulunan ".ini" dosyasını açarak düzenleyebilirsiniz veya "httpd.conf" dosyasının doğru yapılandırılmasıyla da olur. Daha sonra apache'ye restart atmanız gerekmektedir.

Root değilseniz sadece kendi siteniz için yapmanız gerekiyorsa kök dizininizde (public_html) bir ".ini" dosyası oluşturarak veya varolan ".ini" dosyasının içerisine altta verdiğim kodları ekleyerek güvenliğinizi sağlayabilirsiniz. Fakat sitenizle aynı serverda bulunan diğer sitelerden kaynaklanan açıklardan yararlanan kişiler root olmayı rlarsa burada anlatılanlar yetersiz kalır, root olmayı başaramazlarsa sitenizin şifrelerini kaptırmazsanız güvendesinizdir.

***Altta anlattığım bilgiler iyi bir güvenlik için yapılması gerekenler olduğundan dolayı bunları uyguladıktan sonra bazı scriptlerinizin çalışması engellenmiş olabilir. Ama scriptin çalışmasını engelleyen değerleri iptal ederseniz script tekrar doğru şekilde çalışacaktır***

Şimdi gelelim ".ini" yapılandırmasına:

"disable_functions" (Güvenlik)

"disable_functions" ile serverınızda birçok fonksiyonun çalışmasını engelleyebilirsiniz bu sayede sitenize inject edilen , sheller için güvenliğinizi almış olursunuz. Bu kadar fonksiyon fazla gelebilir ama iyi bir güvenlik için şart. Bu kadar sayıda devre dışı bırakılan fonksiyonlar ilk defa "eno7.org" adresinde verilmiştir.

Önerilen:

CODE:

1.
disable_functions = foreach, glob, openbasedir, posix_getpwuid, f_open, system,dl, array_compare, array_user_key_compare, passthru, cat, exec, popen, proc_close, proc_get_status, proc_nice, proc_open, escapeshellcmd, escapeshellarg, show_source, posix_mkfifo, ini_restore, mysql_list_dbs, get_current_user, getmyuid, pconnect, link, symlink, fin, passthruexec, fileread, shell_exec, pcntl_exec, ini_alter, parse_ini_file, leak, apache_child_terminate, chown, posix_kill, posix_setpgid, posix_setsid, posix_setuid, proc_terminate, syslog, allow_url_fopen, fpassthru, execute, shell, curl_exec, chgrp, stream_select, passthru, socket_select, socket_create, socket_create_listen, socket_create_pair, socket_listen, socket_accept, socket_bind, socket_strerror, pcntl_fork, pcntl_signal, pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited, pcntl_wifsignaled, pcntl_wifstopped, pcntl_wstopsig, pcntl_wtermsig, openlog, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, virtual

Eğer bu kadar fonsiyonu devre dışı bırakmak fazla geldiyse alttaki gibi de ayarlayabilirsiniz bu da güvenliğiniz için yeterlidir:

CODE:

1.
disable_functions = glob, posix_getpwuid, array_compare, array_user_key_compare, ini_restore, exec, proc_get_status, proc_nice, proc_open, allow_url_fopen, fin, pconnect, system, dl, passthruexec, shell_exec, proc_close, proc_get_status, chown, chgrp, escapeshellcmd, escapeshellarg, fileread, passthru, popen,curl_exec, shell, execute

————————-

"safe_mode" (Güvenlik)

"Safe Mode" adından da anlaşılacağı gibi "Güvenli Mod" anlamına geliyor. "Safe Mode" genelde birçok serverda "Off" durumdadır bu da birçok tehlikeye davetiye çıkaran unsurlar arasında yer alır. "Güvenli Modu Açık" durumuna getirmek shellerin serverımızda istedikleri gibi dolaşmalarını, exploitlerin çalıştırılmasını komutların execute edilmelerini önler. Günümüzde "açık olan güvenlik modunu" kapalı duruma getiren mevcut fakat altta anlatılan önlemlerle bunun da önüne geçilebilir.

Önerilen:

CODE:

1.
safe_mode = on

————————-

"register_globals" (Güvenlik Performans)

.ini dosyasında bulunan "post" "get" ile gönderilen değerlere kullanıcı adlarıyla ulaşılıp ulaşılamayacağını belirtir. Session, cookie değerlerini kendi adıyla mlayarak birer değişken olmasına olur. "Off" olarak ayarlanırsa bu gibi değerlere kendi mladığı şekilde ulaşılamaz.

Önerilen:

CODE:

1.
register_globals = off

————————-

"allow_url_fopen" (Güvenlik)

"allow_url_fopen" default olarak "açık" şeklinde gelir bunun "on" açık olması "file_get_contents()", "include()", "require()" fonksiyonlar uzaktaki dosyaları da işlemesine olanak r. Bunlara verilen bilgiler hiçbir kontrolden geçirilmezse kritik güvenlik açıklarını sebep olur.

Önerilen:

CODE:

1.
allow_url_fopen = off

————————-

"allow_url_include" (Güvenlik)

Bu değer kapalı yapıldığında "require" "include" ile uzaktan dosya çağırılması engellenmiş olur bu sayede büyük bir tehlikeden kurtulmuş olursunuz.

Önerilen:

CODE:

1.
allow_url_include = off

————————-

"display_errors" (Güvenlik)

Bu seçenek sitenizin çalışmasında oluşacak bir hatayı tarayıcıya yansı yansıtmayacağını belirler yani siteniz için diyelim bir veya portal kullanıyorsunuz bunların çalışması esnasında genelde "Fatal error: Call to undefined function get_header() in /home/vhosts/.com/index. on line 37" şeklinde benzeri görülür bunların gözükmesini engellemek için bu değeri kapalı duruma getirmek gerekir zira kötü niyetli kişiler sitenizin serverda bulunan tam yolunu öğrenmiş olurlar.

Önerilen:

CODE:

1.
display_errors = Off

————————-

"cgi.force_redirect" (Güvenlik)

Bu değer normalde "on" olarak gelir sunucularında IIS, OmniHTTPD gibi buralarda kapatılması gerekir. Kendi sunucunuz için bu durum yoksa değiştirmenize gerek yoktur.

Önerilen:

CODE:

1.
cgi.force_redirect = on

————————-

"magic_quotes_gpc" (Güvenlik Performans)

Magic Quotes işlemi GET/POST yöntemiyle gelen Cookie datasını otomatikmen script'e kaçırır. Önerilen bu değerin kapalı olmasıdır.

Önerilen:

CODE:

1.
magic_quotes_gpc = off

————————-

"magic_quotes_runtime" (Güvenlik Performans)

Magic quotes çalışma sürecinde data oluşturur, SQL'den exec()'den, vb.

Önerilen:

CODE:

1.
magic_quotes_runtime = Off

————————-

"magic_quotes_sybase" (Güvenlik Performans)

Sybase-style magic quotes kullanır (Bunun yerine ' ' bununla '' kaçırır)

Önerilen:

CODE:

1.
magic_quotes_sybase = Off

————————-

"session.use_trans_sid" (Güvenlik)

Bu ayarı dikkatli ayarlayın, kullanıcı emaile aktif oturum ID'si içeren URL gönderebilir

Önerilen:

CODE:

1.
session.use_trans_sid = off

————————-

"open_basedir" (Güvenlik)

Burada belirttiğiniz bir dizin haricindeki dosyaları veya klasörleri görmeleri olanaksızdır yani sitenizde sadece dosyalar dizininin görüntülenmesini istiyorsanız böyle

CODE:

1.
/home/vhosts/.com/public_html/dosyalar/

veya hem dosyalar hem de resimlerin bulunduğu yerin gözükmesi için de böyle

CODE:

1.
/home/vhosts/.com/public_html/resimler:/home/vhosts/.com/public_html/dosyalar/

bunlar haricindeki yerlerin görünmesi imkansızdır.

Önerilen:

CODE:

1.
open_basedir = /home/vhosts/.com/public_html/resimler:/home/vhosts/.com/public_html/dosyalar/

/resimler /dosyalar yazan yere görünmesini istediğiniz dizinleri belirtin.

————————-

"safe_mode_exec_dir" (Güvenlik)

Safe Mode açıkken bunu yaparsanız sadece belirttiğiniz dizinde işlem yapılmasına izin verirsiniz. Safe Mode kapalıyken burada belirttiğiniz dizinlerin dışında hiçbir dizinde işlem yapılamaz. "/home/vhosts/.com/public_html/" yazan yere kendi dizininizi yazabilirsiniz. Böylece, diyelim "/etc" v.s dizininden herhangi birşey çalıştırmasına izin vermezsiniz.

Önerilen:

CODE:

1.
safe_mode_exec_dir = "/home/vhosts/.com/public_html/"

"Safe Mode" yani "Güvenli Mod" açıkken yapılması edilmez. Çünkü "safe mode" burada belirttiğiniz dizinde etkisiz kalacaktır. Güvenli Mod'un açık olması o dizinde işe yaramayacaktır. Güvenlik için, "Safe Mod" yani "Güvenli Mod" "off" kapalıyken kullanılması daha uygundur.

————————-

"aspi_tags" (Güvenlik)

ASP Style < % % > taglarına izin verilip verilmeyeceği belirlenir, kapalı duruma getirilmesi önerilir.

Önerilen:

CODE:

1.
asp_tags = Off

————————-

"session.hash_function" (Güvenlik)

Oturumlar için Hash Fonksiyonu

0: MD5 (128 bits)
1: SHA-1 (160 bits)

Önerilen:

CODE:

1.
session.hash_function = 0

————————-

"session.hash_bits_per_character" (Güvenlik)

Hash çevirirken her karakterde kaç bit saklansın

4 bits: 0-9, a-f
5 bits: 0-9, a-v
6 bits: 0-9, a-z, A-Z, "-", ","

Önerilen:

CODE:

1.
session.hash_bits_per_character = 5

————————-

"expose_php" (Güvenlik)

"expose_php" açık ise kapalı yapılması önerilir. Aksi takdirde ile yaptığınız herşeyde sunucu tarafından sürümü gibi bilgiler gösterilir. Hackerlar hatta Lamerlar bu bilgileri severler. Bunları engellemek için "off" konumuna getiriniz.

Önerilen:

CODE:

1.
expose_php = Off

————————-

"html_errors" (Güvenlik)

Bu değerin açık olması durumunda tıklanabilir mesajları üretecektir. Kapalı olması güvenlik için önerilir.

Önerilen:

CODE:

1.
html_errors = off

————————-

"max_execution_time" (Güvenlik)

Scriptinizi maksimum uygulamayı yürütme zamanı mesela kullanıcı bir linke tıkladı bu linkin açılması belirtilen saniyeden fazla olursa sayfa sitenizin serverda bulunduğu tam yolu göstererek verir. Bu hataların gözükmesi güvenlik açısından sakıncalıdır. 300 saniye yazan yeri istediğiniz zaman ile değiştirebilirsiniz.

Önerilen:

CODE:

1.
max_execution_time = 300

————————-

"max_input_time" (Güvenlik)

Scriptinizin aynı şekilde bir dataya ulaşmak için istek yolladığında maksimum geçen zaman

Önerilen:

CODE:

1.
max_input_time = 300

————————-

"ServerSignature" (Güvenlik Performans)

"ServerSignature" sitenizde bulunmayan bir dosyanın bakılması durumunda bu sayfanın altında serverla ilgili bir bilgi yer alır bu da performansı düşürür ayrıca kötü niyetli kişiler serverla ilgili bir bilgi öğrenmiş olurlar.

Önerilen:

CODE:

1.
ServerSignature = Off

————————-

"UseCanonicalName" (Performans)

Bu ayarın açık olması Apache self-referencing URL oluşturduğunda Server ismi porttan oluşan bir çözülmüş isim kullanır.

Önerilen:

CODE:

1.
UseCanonicalName = Off

————————-

"HostnameLookups" (Performans)

"HostnameLookups" açık olması performansın düşmesine olur. IP numarası DNS sunucusundan bakılarak adres öğrenilir buda performansı düşürür.

Önerilen:

CODE:

1.
HostnameLookups = Off

————————-

"ExtendedStatus" (Performans)

Serverın durumunu öğrenmek için server-status kullanılıyorsa Apache her an bu işlemcinin çağrılabileceğini beklediği için hazır bekler her an sistem saatini öğrenmesi gerekir bu da performansı düşürür.

Önerilen:

CODE:

1.
ExtendedStatus = off

————————-

"register_long_arrays" (Güvenlik Performans)

Bu değerin "on" açık olması durumunda sisteminizde her script çalışmayacaktır install v.s yapmakta hatalarla şılaşabilirsiniz ama iyi bir güvenlik performans için "off" duruma getirilir.

Önerilen:

CODE:

1.
register_long_arrays = Off

————————-

"allow_call_time_pass_reference" (Performans)

Fonksiyonların çağrılma zamanında yaşanan uyumsuzluklarla ilgili uyarı verir.

Önerilen:

CODE:

1.
allow_call_time_pass_reference = off

————————-

"enable_dl" (Güvenlik)

Bu değerin "off" kapalı olması gerekir aksi halde kişilerin sistemde modüllerinde çalışma yapmasına olanak sağlar sistemde rahat dolaşmalarını sağlar güvenlik için kapalı olması gerekir.

Önerilen:

CODE:

1.
enable_dl = off

————————-

"track_errors" (Güvenlik Performans)

Sürücülerde meydana gelen hatalarda yetki verildiği taktirde mesajı errormsg olarak değişkende gösterilir.

Önerilen:

CODE:

1.
track_errors = Off

————————-

"file_uploads" (Güvenlik)

Açık olursa eğer sunucuda dosya yüklenmesine izin verilmiş olur bu da ciddi bir güvenlik açığına olur eğer kullandığınız scriptden herhangi bir dosya yüklemeniz gerekmiyorsa mutlaka kapalı duruma getiriniz. Bu sayede sitenize herhangi bir shell, script inject edise bile kesinlikle dosya yüklenmesine izin vermez.

Önerilen:

CODE:

1.
file_uploads = off

————————-

"ignore_repeated_errors" (Güvenlik Performans)

Açık olursa tekrarlanan hataları loglamaz.

Önerilen:

CODE:

1.
ignore_repeated_errors = Off

————————-

"ignore_repeated_source" (Güvenlik Performans)

Tekrarlanan mesajlar engellendiğinde, mesaj kaynağını engeller Bu ayar açık yapıldığında hataları loglamayacaktır farklı dosyalardan ya da kaynaklardan tekrarlanan mesajlarla.

Önerilen:

CODE:

1.
ignore_repeated_source = Off

————————-

"display_startup_errors" (Güvenlik Performans)

"display_errors" değeri "on" açık olsa bile, 'nin çalışma sırasında meydana gelen hatalar gözükmeyecektir. Bu değerin şiddetle "off" kapalı duruma getirilmesi önerilir.

Önerilen:

CODE:

1.
display_startup_errors = off

————————-

"safe_mode_gid" (Güvenlik)

UID - GID kontrollerini sadece UID ile yapmasına izin verir böylece aynı grupta dosyalar bulunsa bile göremezler yani serverda bulunan diğer clientların scriptlerini v.s görmeleri engellenir.

Önerilen:

CODE:

1.
safe_mode_gid = Off

————————-

"output_buffering = 4096" (Performans)

4 KB'lik bir tampon çıktısı ayarlar "output buffer"

Önerilen:

CODE:

1.
output_buffering = 4096

————————-

"register_argc_argv" (Performans)

Kapalı olursa gereksiz ARGV ARGC kayıtlarını önler. nin ARGV ARGC değişkenlerini bildirip bildirmemesini anlatır.

Önerilen:

CODE:

1.
register_argc_argv = Off

————————-

"php_value session.use_trans_sid - php_value session.use_only_cookies"

Bu şekilde ayarlanması URL'deki PHPSESSID bilgilerini kaldırır.

Önerilen:

CODE:

1.
php_value session.use_trans_sid = 0
2.
php_value session.use_only_cookies = 1

————————-

"session.auto_start"

Oturum başlatmayı başlangıçta isteme

Önerilen:

CODE:

1.
session.auto_start = 0

————————-

"session.cookie_lifetime"

Cookie'nin zaman ayarı

Önerilen:

CODE:

1.
session.cookie_lifetime = 0

————————-

"memory_limit"

Scriptin tükettiği maksimum hafıza miktarı

Önerilen:

CODE:

1.
memory_limit = 8M

————————-

"post_max_size"

'nin kabul edeceği maksimum POST data boyutu

Önerilen:

CODE:

1.
post_max_size = 256K

————————-

"upload_max_filesize"

Upload edilen dosyaların maksimum boyutu

Önerilen:

CODE:

1.
upload_max_filesize = 256K

————————-

"upload_tmp_dir"

Temporary klasörü HTTP'den gelen dosyalar, ayarlanmazsa default klasörü kullanacaktır.

Önerilen:

CODE:

1.
upload_tmp_dir = /path/to/www/belirlediginiz-dizin

————————-

"variables_order"

(Ortam, GET, POST, Çerez, Sunucu) bunların işlenmedeki sıralarını belirler.

Önerilen:

CODE:

1.
variables_order = "EGPCS"

Üstte belirttiğim kodları ".ini" dosyanıza alt alta ekleyebilirsiniz.

kaynak: ordan burdan

function emailkontrol(str){
var filter=/^.+@.+..{2,3}$/

if (filter.test(str))
testresults=true
else {
return false
}
return true
}

kaynak: ordan burdan

function IsValid(sText)
{ //SAYI MI GİRDİ

//ALT SATIRDAKİ RAKAMLARIN OLDUÐU YERE GİRİLEBİLECEK KARAKTERLERİ YAZ
// ÖRNEK: var ValidChars = "ABCD-*+";
var ValidChars = "0123456789";
var Valid=true;
var Char;

for (i = 0; i < sText.length && Valid == true; i++)
{
Char = sText.charAt(i);
if (ValidChars.indexOf(Char) == -1)
{
Valid = false;
}
}
return Valid;

}

kaynak: ordan burdan

function trim(stringToTrim)
{
return stringToTrim.replace(/^s+|s+$/g,"");
}

kaynak: ordan burdan