Php İle Dışarıdan Gelen Postu Engellemek
-
Merhabalar,
Her zaman ki gibi yeni bir sorum olacak :) Şimdi ben form alanımda Tinymce metin editörü kullanıyorum haliyle o alandaki post edilen veriyi html süzgeçinden geçirmiyorum geçirirsem metin editörü bir boka yaramıyor. Böyle olunca dışarıdan post attılar mı html kodları ile siteyi hackleyebilirler diye düşündüm. dışarıdan gelen postu engellemek için token adında bir session oluşturdum gizli bir input içine yazdırdım gönderince session ile formdan gelen token verisi eşleşiyor ise işleme devam ettiriyorum eşleşmiyorsa hata verdiriyorum. Sizce bu yeterli mi ? başka ne gibi yöntemler kullanabilirim ?
-
arkinfes bunu yazdı
Merhabalar,
Her zaman ki gibi yeni bir sorum olacak :) Şimdi ben form alanımda Tinymce metin editörü kullanıyorum haliyle o alandaki post edilen veriyi html süzgeçinden geçirmiyorum geçirirsem metin editörü bir boka yaramıyor. Böyle olunca dışarıdan post attılar mı html kodları ile siteyi hackleyebilirler diye düşündüm. dışarıdan gelen postu engellemek için token adında bir session oluşturdum gizli bir input içine yazdırdım gönderince session ile formdan gelen token verisi eşleşiyor ise işleme devam ettiriyorum eşleşmiyorsa hata verdiriyorum. Sizce bu yeterli mi ? başka ne gibi yöntemler kullanabilirim ?
Isi bilen adam hidden inputu da gonderir yaninda client tarafta oldugun icin bi halta yaramaz o :)
Html icerisinden problemli olanlari temizlemen lazim her zaman. Script ve meta taglari vs.
-
http://stackoverflow.com/a/31683058
Bu isini gorur muhtemelen
-
-
NmC bunu yazdıarkinfes bunu yazdı
Merhabalar,
Her zaman ki gibi yeni bir sorum olacak :) Şimdi ben form alanımda Tinymce metin editörü kullanıyorum haliyle o alandaki post edilen veriyi html süzgeçinden geçirmiyorum geçirirsem metin editörü bir boka yaramıyor. Böyle olunca dışarıdan post attılar mı html kodları ile siteyi hackleyebilirler diye düşündüm. dışarıdan gelen postu engellemek için token adında bir session oluşturdum gizli bir input içine yazdırdım gönderince session ile formdan gelen token verisi eşleşiyor ise işleme devam ettiriyorum eşleşmiyorsa hata verdiriyorum. Sizce bu yeterli mi ? başka ne gibi yöntemler kullanabilirim ?
Isi bilen adam hidden inputu da gonderir yaninda client tarafta oldugun icin bi halta yaramaz o :)
Html icerisinden problemli olanlari temizlemen lazim her zaman. Script ve meta taglari vs.
Hocam işte zararlı olan kodlar hangileri yardımcı olursanız fonksiyon ile süzeyim
@SinusX bişey anlamadım hocam :S
-
arkinfes bunu yazdı
Merhabalar,
Her zaman ki gibi yeni bir sorum olacak :) Şimdi ben form alanımda Tinymce metin editörü kullanıyorum haliyle o alandaki post edilen veriyi html süzgeçinden geçirmiyorum geçirirsem metin editörü bir boka yaramıyor. Böyle olunca dışarıdan post attılar mı html kodları ile siteyi hackleyebilirler diye düşündüm. dışarıdan gelen postu engellemek için token adında bir session oluşturdum gizli bir input içine yazdırdım gönderince session ile formdan gelen token verisi eşleşiyor ise işleme devam ettiriyorum eşleşmiyorsa hata verdiriyorum. Sizce bu yeterli mi ? başka ne gibi yöntemler kullanabilirim ?
$_SERVER["HTTP_REFERER"]; ile referer kontrolü yapıp sadece izin verdiğin domainlerin post atmasına izin verebilirsin istediğin olur ama buda curl vb yöntemlerle aşılabilir
-
beyler curl ile bir çok yöntem aşılabiliyor.
bana göre en sağlıklı yöntem captcha. Google captcha kullanabilirsin.
hidden token kolaylıkla okunabilir. Referer kontrolüde çözüm değil.
veya filtreleme olayına girersin belli html taglarına izin verebilirsin. <p> <br> <img gibi
SPY-CX5 tarafından 25/Mar/17 23:21 tarihinde düzenlenmiştir -
Tinymce ile <script> tagları gönderilmeyeceği için tavsiyem <script gibi tagları sildirmen.
-
yahu adam ne sormuş siz ne cavaplar vermişsiniz. csrf tokenlar ıvırlar zıvırlar havalarda uçuşmuş. şimdi hocam ben sana şöyle açıklayayım. TinyMCE'den veri alıp database'e kaydediyorsan ve sonra bunu biryerlerde ekrana basıyorsan 2 zafiyetin oluşma ihtimali var.
- SQL Injection
- XSS
Gel gelelim bunlardan korunmaya.
SQL Injection;
- PDO kullan.
- Yok ben PDO kullanmam mysql_* fonksiyonları kullanıyorum dersen; gelen veriyi "mysql_real_escape_string" fonsksiyonuna al ve o hali ile database'e kaydet. Sonra o veriyi bir yerde ekrana basacaksan db'den çektiğin halini "stripslashes" fonksiyonundan geçirip ekrana bas ki eğer mysql_real_escape_string tırnak gibi karakterlerin önüne ters slash koymuşsa onları düzeltsin diye.
XSS;
XSS için TinyMCE zaten birşey öneriyor. o önerdiği şeyler şu sayfada mevcut: http://archive.tinymce.com/wiki.php/TinyMCE3x:Security
Listedekilerden "zend filter input" geçerliliğini yitirdiğinden tavsiyem "htmlawed" kullanman. Ama istersen "HTMLPurifire" da kullanabilrisin. Karar senin.
-
session'da aşılabilir hocam. sen mutlaka pdo kullan. kaydederken de strip_tags ile html kodlarını kontrolden geçirebilirsin. böylece metin editörünü de devre dışı bırakmamış olursun. tabiki bu da yeterli değil. bence bir fonksiyon oluşturup, zararlı olabileceğini düşündüğün bütün kodları içerisinde aratabilirsin. bunu da kendi ihtiyacına göre şekillendirmen gerekiyor. nasıl bir function kullanacağın da datayı nasıl ve nerde kullanacağına bağlı.
-
fiki bunu yazdı
yahu adam ne sormuş siz ne cavaplar vermişsiniz. csrf tokenlar ıvırlar zıvırlar havalarda uçuşmuş. şimdi hocam ben sana şöyle açıklayayım. TinyMCE'den veri alıp database'e kaydediyorsan ve sonra bunu biryerlerde ekrana basıyorsan 2 zafiyetin oluşma ihtimali var.
- SQL Injection
- XSS
Gel gelelim bunlardan korunmaya.
SQL Injection;
- PDO kullan.
- Yok ben PDO kullanmam mysql_* fonksiyonları kullanıyorum dersen; gelen veriyi "mysql_real_escape_string" fonsksiyonuna al ve o hali ile database'e kaydet. Sonra o veriyi bir yerde ekrana basacaksan db'den çektiğin halini "stripslashes" fonksiyonundan geçirip ekrana bas ki eğer mysql_real_escape_string tırnak gibi karakterlerin önüne ters slash koymuşsa onları düzeltsin diye.
XSS;
XSS için TinyMCE zaten birşey öneriyor. o önerdiği şeyler şu sayfada mevcut: http://archive.tinymce.com/wiki.php/TinyMCE3x:Security
Listedekilerden "zend filter input" geçerliliğini yitirdiğinden tavsiyem "htmlawed" kullanman. Ama istersen "HTMLPurifire" da kullanabilrisin. Karar senin.
@fiki
Hocam ilk öncelikle allah razı olsun :) zaten PDO kullanıyorum eskiden Mysql_* kullanırdım bu sefer ki projemde PDO ya geçtim ve biraz zorlandım en önemlisi Bind etmeyi falan hiç anlamadım direkt normal ekliyorum sisteme tabi önce yazdığım fonksiyonda geçiriyoum üstüne mysql_real_escape_string den geçiriyorum. Google captcha kullanmayı planlıyrorum o çözüm olur gibime geliyor. Sizden tek istediğim hangi kodları süzmem gerekiyor ? sedece script yeterli mi ?
Bu fonksiyon yeterli mi ?:
function htmlbak($text) {
$text=str_ireplace("<script","",$text);
$text=str_ireplace(" //
$text=str_ireplace("","",$text);
$text=str_ireplace(",","",$text);
$text=str_ireplace(" // ]]> ,","",$text);
$text=str_ireplace("<style,","",$text);
$text=str_ireplace(",","",$text);
$text=str_ireplace(",","",$text);
return $text;
}