Benim kod daha güvenli hale getirmek için nasıl

7 Cevap php

Bu web sitesi (benzeri) olan biri gibi yorumlarla bir oylama yaptık ve ben mümkün http isteği kötüye hakkında biraz endişeliyim. Sana şüpheli kodunu göstermek sonra ne demek istediğimi anlarsınız:

$.ajax({
  type: 'POST',
  url: 'http://localhost/comments/vote_down/' + post_id
});

Şimdi onun hala localhost ancak sonunda web alacak. Ne birisi sadece komut bir tür yaparsa hangi will run n times bu url http://localhost/comments/vote_down/post_id.

Hatta kullanıcı doğrulama çok yararlı, sadece kötü niyetli komut doğrulamak için çimdik ve tekrar yapabilirsiniz. Nasıl bu istek daha güvenli yapabilirsiniz, ben ne yapabilirim? teşekkür ederim

EDIT

Ben bazı cevaplar değil, şimdiye kadar aradığım olanları görmek.

Belki çok fazla, x girişimleri sonra bunu ben doğrudan, herkese ama localhost (veya website.com) yönlendirildi birine bu talebi reddedebilir bir yolu yoktur bekliyorum.

Başlık kimlik Belki bir çeşit? Ben çok soruyorum neden ana nedeni olduğunu o içine değilim.

EDIT

Ayrıca ne kadar önce bir dakika ya da yaklaşık arızî keşfettim, ben çukur birkaç benzer sorular göz atıyordum ve benim kundakçı oldu, ben konsol sonrası tepki 200 OK o zaman ben bunu denedim gördüm .. favorilere bir soru eklendi için gibi 10 kez tekrar aynı şeyi yapmaya reddedilecektir zaman sadece görmek için .. sonunda ben .. sıkıldım bu yüzden StackOverflow Bunu çözmek olmasaydı .. ne yapmaya çalışıyorum: =)

7 Cevap

Sade, her kullanıcı sadece bir kez oy kullanabilirsiniz emin olabilirsiniz.

  • Kullanıcı giriş değilse, oylamaya alow yok.
  • Kullanıcı oturum ise, (bunlar isimli yukarı aşağı size ya kadar gelen oy değiştirebilirsiniz olsun) Yorumlarınız başına bir oy oylama kısıtlamak
  • Eğer kayıtsız kullanıcıların oy vermek istiyorsanız, kurabiye ve ip adresi ve Yönlendiren denetimi ile kilitleyin. (Uzak kurşun geçirmez gelen, ancak koyunda bazı belalarıyla tutacak)

Ek seçenekler:

  • Bir captcha uygulamak

Düzenlemeden yanıt olarak:

Eğer geçerli bir atıfta sayfası kontrol bahsediyoruz, şans dışında. Bu inanılmaz kolaylıkla sahte olduğunu. Eğer X saniye için geçerli olan bir karma oluşturmak ve geçersiz veya süresi dolmuş karma ile tüm isteklerini inkar bir belirteç çek uygulayabilirsiniz. Bu olsa birden çok kez oy engellemek olmaz.

İkinci düzenleme yanıt olarak:

200 Durum kodu sadece http isteği başarılı olduğu anlamına gelir, ne uygulama mantığı isteği ile yapmaya karar tamamen farklı bir konudur. Sen dönebilirsiniz gibi, oy inkar ve 200 dönebilirsiniz bir 403 (muhtemelen gerçi bu durumda daha uygun olurdu).

Bir sonrası kimliği için oy taksitli saklamak daha yapmak zorunda olacak. Sen her oy döküm için bir kayıt saklamak zorunda olacak.

Bir IP adresi, kullanıcı kimliği, vb - veritabanı şema olduğu için ayarlandıktan sonra, her oy ile ek bilgileri ilişkilendirmek başlayabilirsiniz

Çoğu yerde yalnızca kimliği doğrulanmış kullanıcıların oy kullanma izin ve sadece bir kullanıcı herhangi sonrası kimliği için bir kez oy için izin verir. Stackoverflow ötesine geçer ve kullanıcıların oylarını geri almak ve onları yeniden biçimlendirmek için izin verir.

Onlar oy önce kimlik doğrulaması için bir kullanıcı gerektiren kabul edilebilir değilse, o IP adresine gitmek ve daha sonra bazı aralıklarla bu IP döküm edebilmek için oy sayısını artırın. Bir oy XXX.XXX.XXX.XXX dökülmüştür kez Örneğin, başka bir 15 dakika boyunca tekrar oy veremezsiniz. Bu bir proxy arkasında insanlar için interneti kırmak değil, ama yapılabilir oyun miktarını azaltacaktır.

Hatta daha ileri gidip oyun sistemi birini algılamaya çalışın ve daha sonra zaman bir miktar için onları kara listeye olabilir.

Sen bir belirteç aracılığıyla kimlik doğrulaması gerekir.

Potansiyel, ben sadece bir <img src="http://localhost/comments/vote_down/1"> baskı ve sitemde erişen kullanıcıların oylarını başlayabilirsiniz.

Yapmanız gereken bir sunucu tarafı doğrulama olduğunu, örneğin, bir MD5 hash karşı doğrulamak diyelim (md5(1) = c4ca4238a0b923820dcc509a6f75849b)

http://localhost/comments/vote_down/1?hash=c4ca4238a0b923820dcc509a6f75849b

Şimdi sunucu üzerinde post_id karma ve hash params maçlar, öyle ise, o zaman oy izin verirseniz kontrol etmelisiniz.

Ama sonra ben yine de sadece <img src="http://localhost/comments/vote_down/1?hash=c4ca4238a0b923820dcc509a6f75849b"> aracılığıyla bilmeden kullanıcıların spam oy tutmak olabilir

Ne yapmanız gerekecek bu şekilde, Post_id ve User_id (oturumu) iki karma olduğu bir kullanıcı bir karma başka aynı olmayacaktır.

User: 1
Post_id: 1
md5(11) = 6512bd43d9caa6e02c990b0a82652dca

User: 2
Post_id: 1
md5(12) = c20ad4d76fe97759aa27a0c99bff6710

Açıkçası, gereken hash fonksiyonu tuz, ama bile dışarı ile bu app güzel bu şekilde güvenli olacaktır.

Ben bu soruya cevap yardımcı olacak bazı yol gider umuyoruz. Bu web sitesine göz atın: https://panopticlick.eff.org/. Temelde ne yapar ben sadece benim ofiste gönderdi ettik ve bugüne kadar hepimizin eşsiz konum çeşitli sistem ayarları, yüklü yazı tipi, tarayıcı yetenekleri, zaman dilimi vb dayalı sizi tanımlamak için çalışır.

Şimdi bu yöntem, tamamen güvenli değildir sadece her isteği üzerine sunucuya gönderilen alır verileri değiştirerek sahte tüm bu bilgileri can, ancak (web sitenizin bir saldırı düzleştirmek için bu tekniği kullanır BİLİYOR olurdu çünkü bilinmezlik aracılığıyla güvenlik).

Ben sorunun bir çok katmanlı bir yaklaşım almaya meyilli olacağını düşünüyorum. Yöntemlerin hiçbiri tamamen güvenli olduğundan, tüm yapabileceğiniz onları yığını olduğunu.

  • Onlar etkin çerezleri yoksa insanlar oy izin vermeyin
  • Giriş yapmadınız kullanıcılar için CAPTCHA uygulamak
  • Kendi sistem kurulumu (yüklü yazı tiplerinin karma, tarayıcı yetenekleri, zaman dilimi, vb) sağlamalarının dayalı bilgileri kullanıcılar
  • Kullanıcıların oy giriş böylece bir giriş sistemi var

Birisi oyladigi zaman (onlar oturum açtıysanız) Şimdi, sen, kendi sistem sağlamalarının ve oyuna karşı kendi çerez kendi kullanıcı kimliği saklamak. Bu, oy çıkıyor ve daha sonra anonim tekrar oylama listesinde oturum açmış kullanıcıları önleyecektir - kendi sistem sağlamalarının ve cookie (bunu temizlemek için rahatsız değil varsa) zaten oylamaya bağlı olacak çünkü.

Yapabileceğiniz başka bir şey, belirli bir yazı üzerine oylama belirli bir yönde dövülmüş oluyor olmadığını tespit etmek için bir tetikleyici olun. O (diyelim ki, 20 10 dakika boyunca dakikada oy ve bu oyların büyük bir kısmı aynı yönde olmuştur) dövülmüş oluyor ise, IP adresine bakarak upvotes profil deneyin, sistem bir dayanarak, vb sağlamalarının olası kötü niyetli Bulunmuş keyfi yüzdesi, 15 dakika boyunca bu yazı üzerine oylama kilit olabilir.

Bu yöntemlerin hiçbiri tamamen güvenli ve özlü olma uğruna ben kolayca bu fikir genişletmek için yapabileceğiniz birkaç şey bıraktım. Ama ben bir çok katmanlı bir yaklaşım anahtarı olduğunu düşünüyorum. Tabii, birgün bütün gün çözme captcha'lar akla gelmez gerçekten belirlenen kullanıcı kulesi sistem için bir yol anlamaya olabilir, ama sürece gerçekten iyi günlükleri gibi, bu saldırıyı profil ve buna cevap mümkün olacak.

Umarım bu yardımcı olur

Cheers Iain

Ben Kullanıcıların hangi öğeleri olarak hangi (doğrulanmış) izlemek, ve sadece bir kez, her öğe üzerinde oy için her kullanıcı izin gerektiğini düşünüyorum.

Kullanıcı girişi yapın ve daha sonra kullanıcıya bir bağlantı içeren bir oy tablo gerektirecek önce umarım kimliği üzerinden, onlar / aşağı yukarı olarak olup olmadığını görmek için kontrol edin.

Bu yardımcı olur umarım

En azından bot tabanlı oy ortadan kaldırmak için (aynı anda basılan eserler sayısallaştırma katkıda beri, reCAPTCHA) tavsiye CAPTCHA kullanmak olabilir. Birden fazla insan oy önlenmesi için, bu IP adresi artı tarayıcının User Agent dize falan gibi bir yarı-benzersiz bir tanımlayıcı dayalı sayım düşünün. Veya kullanıcının hesabına göre oy doğrulamak (ve tabii ki kullanıcı kayıt sayfasında bir CAPTCHA koymak).