Jquery Formda Güvenlik Sorunu
-
selam arkadaşlar kaç gundur bu sorunla uğraşıyorum bir türlü çözemedim. Yardımcı olurmusnuz ?
amacım flood engellemek.
Aldığım hata: Notice: Undefined index: guvenlik in C:\wamp\www\ajax.php on line 30post işlemini jquery ile yapıyorum mysqla veri eklemek için
index.php kodlarım<div id="mesaj_gonder"> <div class="ybas">Mesaj Gönder</div> <form action="" method="post" onsubmit="return false"> <span>Adınız</span> <span><input type="text" name="ad" class="yinput" /></span> <span>Mesajınız</span> <span><textarea rows="0" cols="0" name="mesaj"></textarea> </span> <span>G.Kodu: <img id="captcha" src="securimage/securimage_show.php" alt="Güvenlik Kodu" /><a href="#" onclick="document.getElementById('captcha').src = 'securimage/securimage_show.php?' + Math.random(); return false">Resmi Tazele</a> z</span> <span><input type="text" name="guvenlik" id="guvenlik" class="yinput" /></span> <span><input type="submit" value="Mesaj Gönder" class="ygonder" onclick="gonder()" /></span> </form> </div>
ajax.php kodlarım
<?php session_start(); include "ayarlar.php"; include_once("securimage/securimage.php"); $securimage = new Securimage(); header("Content-Type: text/html; charset=iso-8859-9"); //değerleri alalım function GetIP(){ if(getenv("HTTP_CLIENT_IP")) { $ip = getenv("HTTP_CLIENT_IP"); } elseif(getenv("HTTP_X_FORWARDED_FOR")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); if (strstr($ip, ',')) { $tmp = explode (',', $ip); $ip = trim($tmp[0]); } } else { $ip = getenv("REMOTE_ADDR"); } return $ip; } //g.kodu $ad = strip_tags(trim(iconv('UTF-8','ISO-8859-9', $_POST["ad"]))); $mesaj = mysql_real_escape_string(strip_tags(trim(iconv('UTF-8','ISO-8859-9', $_POST["mesaj"])))); $tarih = date("d.m.Y"); $onay = 0; $ip_adresi = GetIP(); // Gönderilen güvenlik kodu yanlışsa yapılacak olan işlem if ($securimage->check($_POST['guvenlik']) == true) { if (empty($ad) || empty($mesaj)){ echo "hata1"; }else { $ekle = mysql_query("insert into mesajlar (yazan,mesaj,onay,ip,tarih) values ('$ad','$mesaj','$onay','$ip_adresi','$tarih')"); if ($ekle){ $id = mysql_insert_id(); $bul = mysql_query("select * from mesajlar where id='$id'"); $goster = mysql_fetch_array($bul); extract($goster); echo "<div class='yorum'> <div class='demiski'><strong>{$yazan}</strong> demişki;</div> <div class='yorum_ic'>{$mesaj}</div> </div>"; }else { echo "hata2"; } } }else{ echo "G.kdu yanlıs"; } ?>
-
Güvenlik kodunu index.php'de oluşturup post etsen olmaz mı?
Ayrıca
securimage/securimage_show.php?' + Math.random() (Burada bir şeyler eksik gibi?)
securimage/securimage_show.php?kod=' + Math.random() (Gibi olmasın?)
-
hocam onu nasıl yapacagım?
phpde acemiyimde simdi ben veirleri ajax.phpye yolladıgımdan tum girdileri orada post ediyorum..
secure image kullanımında sorun gözükmuyor kaynak sitede aynı şekilde kullanılmış
-
hocalar yokmu bunun bir çözümü ??
-
bu işlerden hiç anlamam ama, şöyle bi kurcalayım dedim bakındım.
$a = (int)date("i");
$ip = $_SERVER['REMOTE_ADDR'];
$exec = mysql_query("insert into tbllog(ip,tarih) values('$ip','$a')");
$z = $a-1;
$q = mysql_query("select * from tbllog where ip='$ip' and tarih >='$z'");
if(mysql_num_rows($q)>=40)
{
$ban = mysql_query("insert into tblbanlist(ip) values('$ip')");
if($ban)
{
header('Location: ban.html');
}
}
$q2 = mysql_query("select * from tblbanlist where ip='$ip'");
if(mysql_num_rows($q2)>=2)
{
header('Location: ban.html');
}
$settime = "00:00";
$gettime = date("h:i");
if($gettime==$settime)
{
$trunlog = mysql_query("truncate table tbllog");
if($trun)
{
header('Location: bakim.html');
}
}
$setday = "15";
$a = date("d");
if($setday==$a)
{
$trunban = mysql_query("truncate table tblbanlist");
if($trunban)
{
header('Location: bakim.html');
}
}
?>
Daha sonra PHPmyAdminden Sorgulatıp tabloları olusturacağimiz kodları verelim. denmiş başka bi forumda işini görür mü bilemem :/
PHP- Kodu:CREATE TABLE `tblbanlist` (
`id` int(11) NOT NULL auto_increment,
`ip` varchar(50) collate utf8_turkish_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=5 ;
CREATE TABLE `tbllog` (
`id` int(11) NOT NULL auto_increment,
`ip` varchar(50) collate utf8_turkish_ci NOT NULL,
`tarih` varchar(50) collate utf8_turkish_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=80 ;----------------
Edit:
Başka bi forumda da şunlardan bi alıntı daha.
Bu Sınıf Neyi Korur?
Sunucunuzdaki herhangi bir php dosyasına (index.php vs) saldırıp saniyede 30-40 kere açıp mysqli kasıyorlar ve sunucu iptal oluyor bir süre sonra (şahsen yaşadım ve saydım saniye kaç kere giriş yapılıyor diye 37 çıkmıştı, zaten atak yapan kişiye sordum amacı ne programın diye 80 portundan girip mysqli kasıyormuş).
Kullanacaksanız yazıyı tamamen okuyun.
Nasıl Korur?
İstenilirse .htaccess dosyasından IP ban verir.
Sınır aşılınca bilişim suçlarına yönlendirir.
Sunucunuzda XML desteği olması lazım.
Sınıfı TanıyalımPHP Code:final class Koruma{
/*Özellikler*/
public string $xml; /*sayaç olarak tutulacak xml dosyasını gösterir (o dosyanın chmod ayarları 777 olmalı*/
public int $htacess; /*.htaccess ile ip ban olup olmayacağı 0 dan farklı ise o değer kadar saniye ip ban verir (değeri 50 ise 50 saniye ip ban verir 0 ise ban vermez)*/
public int $reset; /*bir ip'nin bağlantı sayısı bu değer saniye sonra 0 olur*/
public int $izin; /*bir ip'nin reset saniyede sayfayı kaç defa açılabileceğini belirler*/
/*Fonksiyonlar*/
public void Izin(void); /*ip'ye izin olup olmadığını döndürür ve diğer işlemleri yapar (.htaccess ban, ip ekleme süre 0'lama vs.).*/
public void Izinsiz(void); /*Izin fonksiyonun false değeri döndürdüğü zaman yapılacak işlemler if ile kontrolden sonra kullanılır*/
}
.htaccess Dosyası Kullanacaksam Neler Bulunmalı?
HTML Code:<Limit GET POST> order deny,allow #koruma </Limit>
kodları .htaccess dosyanızın her hangi bir yerinde en fazla 1 tane bulunmalıdır (#koruma dahil yorum satırıdır ama yeni eklenecek ip'nin o satıra eklenmesi gerektiğini ifade eder.).
Ayrıca chmod ayarları 777 olmalıdır.
Nasıl Kullanabilirim Bu Sınıfı?PHP Code:<?php
final class Koruma{
public $xml,$htaccess,$izin,$reset;
public function Izin(){
if(file_exists($this->xml.'.xml')){
$sx=simplexml_load_file($this->xml.'.xml');
$ip=$sx->xpath('ping[@ip="'.$_SERVER['REMOTE_ADDR'].'"]');
if(count($ip)){
/*htaccess açma işlemleri*/
if($this->htaccess){
if(file_exists('.htaccess')){
$h=fopen('.htaccess','rt');$ha=fread($h,filesize('.htaccess'));fclose($h);
preg_match('/#([0-9]+)
deny from '.$_SERVER['REMOTE_ADDR'].'/',$ha,$ban);
if($ban[1]<time()&&$ban[1]>0){
$ha=preg_replace('/#[0-9]+
deny from '.$_SERVER['REMOTE_ADDR'].'/',NULL,$ha);
$h=fopen('.htaccess','wt');fwrite($h,$ha);fclose($h);
print $ha.'.ht';
}
}else throw new Exception('.htaccess Yok');
}
/*ip işlemleri*/
if($ip[0]->attributes()->zaman+$this->reset<time()){
$ip[0]->attributes()->sayi=0;
$ip[0]->attributes()->zaman=time();
}else $ip[0]->attributes()->sayi=$ip[0]->attributes()->sayi+1;
$f=fopen($this->xml.'.xml','w');fwrite($f,$sx->asXML());fclose($f);
if($ip[0]->attributes()->sayi>$this->izin){
if($this->htaccess){
if(file_exists('.htaccess')){
$h=fopen('.htaccess','rt');$ha=fread($h,filesize('.htaccess'));fclose($h);
if(!strpos(' '.$ha,$_SERVER['REMOTE_ADDR'])){
$ha=str_replace('#koruma','#'.(time()+$this->htaccess).'
deny from '.$_SERVER['REMOTE_ADDR'].'
#koruma',$ha);
$h=fopen('.htaccess','wt');fwrite($h,$ha);fclose($h);
}
}else throw new Exception('.htaccess Yok');
}
return false;
}else return true;
}else{
/*ip yoksa ekleme*/
$sx->addChild('ping',NULL);
$son=count($sx->ping)-1;
$sx->ping[$son]->addAttribute('ip',$_SERVER['REMOTE_ADDR']);
$sx->ping[$son]->addAttribute('zaman',time());
$sx->ping[$son]->addAttribute('sayi',1);
/*gereksiz ipler silme işlemi*/
$g=$sx->xpath('ping[@zaman<'.(time()-(60*60)).']');
for($i=0,$j=count($g);$i<$j;$i++)
unset($g[$i][0]);
$f=fopen($this->xml.'.xml','w');fwrite($f,$sx->asXML());fclose($f);
return true;
}
}else throw new Exception('XML Dosyası Yok');
}
public function Izinsiz($mysql){
eval('global '.$mysql.';');
@mysql_close($mysql);
@mysql_close();
header('location:http://bilisimsuclari.iem.gov.tr/');
exit(0);
usleep(24*60*60*1000);
}
}
?>bu kodları koruma.php dosyası adında kaydedip,
Kod:<?xml version="1.0"?> <koruma> <ping ip="127.0.0.1" zaman="1265899883" sayi="0"/> </koruma>
bu kodlarıda koruma.xml dosyası adında chmod ayarları 777 olarak kaydedip kullanabilirsiniz.
Buların Hepsini Yaptım Örnek Bir Kullanım LazımPHP Code:<?php
include('koruma.php');
$koruma=new Koruma;
$koruma->xml='koruma'; /* koruma.xml dosyasına kaydedileceğini belirtir 777 olmalı */
$koruma->htaccess=7*24*60*60; /* özellik 0 dan farklıyken .htaccess varsa verilen değerdeki
saniye kadar ip ban verir (bu 1 haftalık) */
$koruma->reset=2; /* ip bağlantı sayısı 2 saniyede bir 0 olur */
$koruma->izin=1; /* 1 ip 2 saniyede 5 kere açabilir bu sayfayı */
/*
$mysqlbaglantim=mysql_connect(...);
mysql baglantisi sart degil $koruma->Izinsiz('$mysqlbaglantim'); kısmında
$mysqlbaglantim null döner sadece
*/
if($koruma->Izin()){
print 'bişeyler yap';
}else{
/* bağlantı ' tırnak içinde yazılmalıdır */
$koruma->Izinsiz('$mysqlbaglantim');
}
?> -
securimage_show.php
dosyanıda koyarsan yardımcı olabilirim.
-
abi gözünüzü sevim şunları utf-8 ve utf8_general_ci yapın. Sorna bol bol sorun yaşayacaksınız.
-
VideoJockey bunu yazdı:
-----------------------------securimage_show.php
dosyanıda koyarsan yardımcı olabilirim.
-----------------------------hocam eline saglık ama onları bende buldum en guvenli yolu bu :)
buyur hocam
secureimage_show.php
-
Ohoo hoho :)
Hocam;
securimage_show.php
<?php function olustur () { $sifre = substr(md5(rand(0,999999999999)),-5); if ($sifre) { session_start(); $_SESSION["koruma"] = $sifre; $width = 99; $height = 34; $resim = @imagecreate ($width,$height); $siyah = ImageColorAllocate($resim, 0, 0, 0); $kirmizi = ImageColorAllocate($resim, 182, 36, 99); $beyaz = ImageColorAllocate($resim, 255, 255, 255); ImageFill($resim, 0, 0, $beyaz); $font = 'font/arial.ttf'; imagettftext($resim, 20, 10, 10, 28, $siyah, $font, $sifre[0]); imagettftext($resim, 20, 0, 25, 28, $kirmizi, $font, $sifre[1]); imagettftext($resim, 20, -10, 40, 28, $siyah, $font, $sifre[2]); imagettftext($resim, 20, 0, 55, 28, $kirmizi, $font, $sifre[3]); imagettftext($resim, 20, 0, 70, 28, $siyah, $font, $sifre[4]); header("Content-type: image/png"); ImagePng($resim); ImageDestroy($resim); } } olustur(); ?>
index.php
<script src="http://code.jquery.com/jquery-latest.min.js"></script> <script language="javascript"> function ChangeCode(){ var NewSecurity= "<img src='securimage_show.php?rnd="+Math.random()+"' alt='guvenlik' style='border: 1px solid #999999;' />"; $("#security").html(NewSecurity); return false; } </script> <div id="mesaj_gonder"> <div class="ybas">Mesaj Gönder</div> <form action="" method="post" onsubmit="return false"> <span>Adınız</span> <span><input type="text" name="ad" class="yinput" /></span> <span>Mesajınız</span> <span><textarea rows="0" cols="0" name="mesaj"></textarea> </span> <span>G.Kodu: <img id="captcha" src="securimage_show.php" alt="Güvenlik Kodu" /><a href="#" onclick="ChangeCode();">Resmi Tazele</a> z</span> <span><input type="text" name="guvenlik" id="guvenlik" class="yinput" /></span> <span><input type="submit" value="Mesaj Gönder" class="ygonder" onclick="gonder()" /></span> </form> </div>
ajax.php
<?php session_start(); include "ayarlar.php"; $girilen_kod = trim(strip_tags($_POST['guvenlik'])); $guvenlik_kodu = trim(strip_tags($_SESSION['koruma'])); header("Content-Type: text/html; charset=iso-8859-9"); //Degerler Tanımlamalar Burada Yapılıyor.. function GetIP(){ if(getenv("HTTP_CLIENT_IP")) { $ip = getenv("HTTP_CLIENT_IP"); } elseif(getenv("HTTP_X_FORWARDED_FOR")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); if (strstr($ip, ',')) { $tmp = explode (',', $ip); $ip = trim($tmp[0]); } } else { $ip = getenv("REMOTE_ADDR"); } return $ip; } $ad = strip_tags(trim(iconv('UTF-8','ISO-8859-9', $_POST["ad"]))); $mesaj = mysql_real_escape_string(strip_tags(trim(iconv('UTF-8','ISO-8859-9', $_POST["mesaj"])))); $tarih = date("d.m.Y"); $onay = 0; $ip_adresi = GetIP(); // Gönderilen güvenlik kodu yanlışsa hata veriyor dogruysa devam. if($girilen_kod != $guvenlik_kodu) { echo "G.kdu yanlıs"; } else { if (empty($ad) || empty($mesaj)){ echo "hata1"; }else { $ekle = mysql_query("insert into mesajlar (yazan,mesaj,onay,ip,tarih) values ('$ad','$mesaj','$onay','$ip_adresi','$tarih')"); if ($ekle){ $id = mysql_insert_id(); $bul = mysql_query("select * from mesajlar where id='$id'"); $goster = mysql_fetch_array($bul); extract($goster); echo "<div class='yorum'> <div class='demiski'><strong>{$yazan}</strong> demişki;</div> <div class='yorum_ic'>{$mesaj}</div> </div>"; }else { echo "hata2"; } } } ?>
Dosya içeriklerini üstte yazdıklarımla değiştirip bir denermisin.
-
aynı hocam değişmedi ve resim bu defa gozukmüyor ?
-
Download : http://blog.byyasinc.com/dosyalar/capchta.rar
Test : http://blog.byyasinc.com/dosyalar/capchta
İndir hocam editleyerek üstünden geç.