2016-04-01 16 views
-1

'da İsteğin Yasal olup olmadığını belirleme HTML dosyalarının doğrudan kullanıcıları tarafından çekilmesini önlemek için bir httpHandler kurdum. Daha önce hiç böyle bir şey yapmadım ve çok fazla araştırma yaptıktan sonra, bir httpHandler kullanmak en iyi sonuç gibi görünüyordu. Ancak tüm eğiticiler, işleyicinin nasıl kurulacağını açıkladı ama sonra hepsi "Artık isteğin meşru olup olmadığını kontrol et!" Bunun nasıl yapılacağını açıklamaksızın.HttpHandler

Diğer etki alanlarından gelen isteklerin, örneğin, görüntü sızmasını durdurmak için nasıl durdurulacağına dair birçok örnek vardır. Ne yapmak istediğim, Açısal katmanım tarafından yapılan HTML dosyalarına yönelik isteklere izin vermek, ancak doğrudan tarayıcı tarafından yapılan istekleri engellemek. Yani, eğer Angular bir HTML şablonu isterse, onu almalıdır, ancak birisi tarayıcı çubuğuna "mysite.com/static/templates/template.html" yazıyorsa engellenmelidir.

Geldiğim çözüm, Angular'ın her istekte bulunan bir özel başlık göndermesidir; httpHandler daha sonra bu üstbilginin varlığını arar ve üstbilgi mevcutsa HTML dosyasını döndürür. Bu nedenle, talep Açısal ekosistemden gelmiyorsa, üstbilgiye sahip değildir ve geri döner. Bu yöntemle ilgili iki sorun vardır:

  1. Biraz hassastır. Kullanıcıların, yapmaları gerekmediğinde engellendikleri (nadiren) raporlar aldık ve bunun neden gerçekleştiğini anlayamadık. JavaScript dosyaları için işe yaramamaktadır. JS dosyaları aynı şekilde yüklenmez, bu yüzden onları aynı şekilde koruyamam.

bir istek benim arayüzden meşru tarayıcı bardan doğrudan geldi, yoksa anlatmak için daha iyi bir yöntem var mı?

Ön uç açısal, arka uç .NET 4.5.

cevap

0

Hayır yok. Yapabileceğin en iyi şey başlıklara bakmak. Bir "hain" kullanıcısı, meşru bir üstbilginin neye benzediğini çoğaltmak ve yine de verileri almak için önemsizdir.

Neler olup bittiğini düşünürseniz, URL'de yazma, tarayıcıyı karşıdan yükleme veya ajax araması (başlıklar hariç) arasında teknik bir fark yoktur. Https kullanıyor olsanız bile, bu, Fiddler gibi araçlarla veya çoğu modern dilde iki veya üç satır kodla kolayca çoğaltılabilir.

Bunu neden yaptığınızı bilmiyorum, ancak bant genişliği veya bir şeyden kaynaklanıyorsa, önbelleğe almayı öneriyorum. Buraya girilecek bir konunun detaylandırılması için bir yol var, bu yüzden yapmayacağım.

Eğer peşinde iseniz dosyalarınızın güvenliği ise (örneğin birisinin tarayıcıdan başka js dosyasına veya html dosyasına bakmasını istemiyorsanız), temelde şanstan yoksunuzdur, çünkü böyle bir şey yok. Hatta mümkün değil.