Arkadaşlar yıllardır emek verdiğimiz site bu aralar hackleniyor.
Ne yapabilirim?
$sorgu = mysql_query("SELECT * FROM yazilar WHERE id='$_GET[id]'");
while($row = mysql_fetch_array($sorgu)){
echo"<form action=\"\" method=\"post\">";
echo"<table cellspacing=\"2\" cellpadding=\"2\">";
echo"<tr><td align=\"right\">Başlık</td><td><input type=\"text\" name=\"baslik\" value=\"$row[baslik]\" size=\"50\"></td></tr>";
echo"<tr><td align=\"right\">Kategori</td><td><select name=\"cid\">";
$sorgu2 = mysql_query("SELECT id,isim FROM yazilar_kat ORDER BY isim ASC");
while($row2 = mysql_fetch_array($sorgu2)){
if($row2[id]==$row[cid]){$b='selected';}else{$b='';}
echo"<option value=\"$row2[id]\" $b>$row2[isim]</option>";
}
sql injection açığından dolayı sitem hackleniyor.
16
●1.315
- 24-11-2013, 02:54:26PHP bilgim yok fakat evet açık var. Bilginiz varsa ben size özetliyim;
Bir fonksiyon yazın ve ' " < > - karakterlerini replace ile silin.
$_GET[id] verisini bir değişkene atayın. Değişken = yaparken $_GET[id] yi fonksiyondan geçirin.
Sayfanızda $_GET[id] kullanılan her yerde o değişkeni kullanın.
Yani demek istediğim $_GET[id] fonksiyon ile " ' - < > kodlarını süzdürün.
Yada başka bir çözüm yolu isterseniz $_GET[id] içinde sayıdan başka birşey geçiriyorsa hata döndürün veya sayfanızı yönlendirin.
//Düzenleme;
Fonksiyonu buldum;
function sqlSuzgeci($string) { $string = stripslashes($string); $string = strip_tags($string); $string = mysql_real_escape_string($string); return $string; }Bunu sqlSuzgeci($_GET[id]) olarak değişkene ata veya heryerde bu fonksiyonu kullan. - 24-11-2013, 03:04:01tolgasen adlı üyeden alıntı: mesajı görüntüle
üstadım bilgim yok ama yinede yapmaya çalışacağım.
Teşekkürler - 24-11-2013, 03:07:10O zaman verdiğim kodu direkt böyle kullan.h2run adlı üyeden alıntı: mesajı görüntüle
Ama başka yerlerdede muhtemelen açık vardır ve her yeri düzenlemen gerekli.
function sqlSuzgeci($string) { $string = stripslashes($string); $string = strip_tags($string); $string = mysql_real_escape_string($string); return $string; } $sorgu = mysql_query("SELECT * FROM yazilar WHERE id='sqlSuzgeci($_GET[id])'"); while($row = mysql_fetch_array($sorgu)){ echo"<form action=\"\" method=\"post\">"; echo"<table cellspacing=\"2\" cellpadding=\"2\">"; echo"<tr><td align=\"right\">Başlık</td><td><input type=\"text\" name=\"baslik\" value=\"$row[baslik]\" size=\"50\"></td></tr>"; echo"<tr><td align=\"right\">Kategori</td><td><select name=\"cid\">"; $sorgu2 = mysql_query("SELECT id,isim FROM yazilar_kat ORDER BY isim ASC"); while($row2 = mysql_fetch_array($sorgu2)){ if($row2[id]==$row[cid]){$b='selected';}else{$b='';} echo"<option value=\"$row2[id]\" $b>$row2[isim]</option>"; } - 24-11-2013, 03:52:38Kimlik doğrulama veya yönetimden onay bekliyor.ezSQL kullanın. GET, POST, FILES gibi kullanıcıdan alınan tüm verileri ezSQL::escape() metoduyla filtreleyin.
ayrıca bknz;
PHP ezSQL veritabanı sınıfı kullanımı - 24-11-2013, 16:03:55Usta çok sağol videoyuda izledim yapmaya çalışacağım yapabilirsem lakin bilgin kısıtlı.saintx adlı üyeden alıntı: mesajı görüntüle
--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 17:03:55 -->-> Daha önceki mesaj 17:02:14 --
Diğer açık ise,
<?
if($_GET[op] && file_exists("bolumler/$_GET[op].php")){
include"ust.php";
include("bolumler/$_GET[op].php");
include"alt.php";
}
?>
Bu kodlar için bir öneriniz var mı?
Burada da bariz bir açık var mı?
function sqlSuzgeci($string) {
$string = stripslashes($string);
$string = strip_tags($string);
$string = mysql_real_escape_string($string);
return $string;
}
Yukarda arkadaşın yardımcı olduğu gibi burayada aynı işlemi uygulayabilir miyiz?