hazır yatmadan önce güvenlikle alakalı fonksiyonlara değineyim hafiften
htmlspecialchars-htmlentities
htmlentities iso-8859-9 ve latin5 yani türkçe desteklemiyor ,ent_quotes,iso-8859-9 yapsanda nafile bu yüzden sayfanız utf-8 yada latin1 falansa kullanmanız yoksa benzeri işi yapan
htmlspecialchars ı kullanmanızı öneririm mesala
form yaptınız
<?
if(empty($_POST)) { ?>
<form action='' method='post'>
<input type=text name='icerik'>
<input type=submit value='Git'>
</form>
<? } else {
echo $_POST[icerik];
}
?>gibi yazdırırsanız şuan hiç bir süzme işlemi yapmadınız normal insanlar kullanablir ama
sizin bu iyineyitinizi suistimal edecek bir ton hacker-lamer bulmak mümkün onlar da sizi bulur yada...
bu yüzden mesala oradan
ahmet yazıp gönderebilir ama
<script>....</script>
<script>document.cookie</script>
daha bir ton zararlı kod varyasyonları var bunları mesala direk engelleyebilirsiniz
buradan html bir kod gelmesini beklemiyorsanız
htmlspecialchars ile direk tüm gelen html kodlarını egale edebilirsiniz sql de synatx hatalara verecek kodlar içinde
addslashes ekliyoruz bunları topluça şöyle yazalım
$_POST[icerik]=addslashes(htmlspecialchars($_POST[icerik]));
mesala hiç ama hiç htmlkod gelmesini beklemiyosunuz direk kökten html temizlik için
$_POST[icerik]=strip_tags($_POST[icerik]);
fonksiyonunu kullanmanız yerinde olacaktır
mysql e gireceğiniz verilere or union vs. lere replace yapıp slashes eklemek yeterli gibi görünsede php.net
mysql_real_espace_string fonksiyonunu öneriyor güvenlik sayfasında
yine diğre fonksiyonlar gibi yapıp post dizisinin input namesini [] keyi ile belirtip bir birine eşitleyebiliriz yada bir değişkene atayabiliriz yada yine aynı input keye ayarlıyacaksak
üstte vermiştim tekrar yazayım
<?
if(empty($_POST)) { ?>
<form action='' method='post'>
<input type=text name='icerik'>
<input type=submit value='Git'>
</form>
<? } else {
foreach($_POST as $saho=>$ankabt) $_POST[$saho]=strip_tags($_POST[$saho]);
echo $_POST[icerik];
}
?>gibi kullanabiliriz
birde bu foreach ı böyle inputtan gelen 15-20 veri gelirken hepsine uygulayıp çokdaha pratik olabilirsiniz diğer yöntem ise
$icerik=strip_tags($_POST[icerik]);
gibi yapabilirsiniz
yine sql e işleyecekseniz
foreach kısmında dönerken veri
$_POST[$saho]=mysql_real_escape_string($_POST[$saho]);
gibi kullanabilirsiniz...
birdemesala
get-posttan gelen tüm veriyi sql e işlemede slashes lemek sql den mesala
fetch_array-row-assoc vs. array diziye atıyorsanız yani oradan da okurken stripslashes yaparak veriyi güvenli şekilde yazıp okuyabilirsiniz.
---
foreach($_POST as $saho=>$anka) $_POST[$saho]=@addslashes($_POST[$saho]);
foreach($_GET as $saho=>$anka) $_GET[$saho]=@addslashes($_GET[$saho]);
--
gelen tüm veriyi slashes ledik
çıkan veride mesala
--
$saho=mysql_fetch_array(mysql_query("select adi from videolar where id='5' "));
foreach($saho as $an=>$ka) $saho[$an]=stripslashes($saho[$an]);
gibi kullanabilirsiniz