Bir web sayfasındaki javascript kodunu nasıl gizlerim?


101

Kaynak kodu tarayıcıların Kaynağı Görüntüle özelliği aracılığıyla görüntülendiğinde, Javascript kodunu bir web sayfasının html'sinden gizlemek mümkün müdür?

Kodu gizlemenin mümkün olduğunu biliyorum, ancak kaynak görüntüleme özelliğinden gizlenmesini tercih ederim .


1
İstemci tarafında ve böylece her istemcide (tarayıcılarda) yer alacak
naveen

8
Javascript'i neden gizlemek istersiniz? Kullanıcının bulmasını istemediğiniz hassas verileri asla koymazsınız ... Değil mi ?!
Paul

1
Bir tarayıcı hangi Javascript'i çalıştıracağını nasıl bilir?
Wylie

1
@PaulPRO'nun iyi bir noktası var - JavaScript'i neden gizlemek istersiniz? Ne yaptığınızı bilmek isteyen herkes HER ZAMAN birkaç tuşa basarak betiğinizi alabilecek. Sadece View-Source'a güvenmeyecekler. Senaryoyu nasıl edineceğini bilmeyenler muhtemelen onunla ilgilenmeyecektir.
Stephen Chung

1
@UdayHiwarale İstemci tarafından gerçekleştirilen GET ve diğer HTTP sorgularının ne olduğunu görmek çok kolaydır (sadece geliştirici konsolunu açın ve ağ sekmesine gidin). Bir web sitesi geliştirirken, sunucuda tüm isteklerin bir saldırgan tarafından yapıldığını varsaymalısınız - bu nedenle tüm verileri doğrulamalı ve SQL veya başka bir koda eklediğiniz her dizeden dikkatlice çıkış yapmalısınız.
Suzanne Dupéron

Yanıtlar:


138

Başka birinin sorunuzu doğrudan ele aldığından emin değilim, bu kod tarayıcının Kaynağı Görüntüle komutundan görüntüleniyor.

Diğerlerinin de söylediği gibi, bir tarayıcıda çalışması amaçlanan javascript'i kararlı bir görüntüleyiciden korumanın bir yolu yoktur. Tarayıcı çalıştırabiliyorsa, belirlenen herhangi bir kişi de görüntüleyebilir / çalıştırabilir.

Ancak, javascript'inizi aşağıdakilerle birlikte gelen harici bir javascript dosyasına koyarsanız:

<script type="text/javascript" src="http://mydomain.com/xxxx.js"></script>

etiketlerini seçerseniz, javascript kodu Kaynağı Görüntüle komutuyla hemen görünmez - yalnızca komut dosyası etiketinin kendisi bu şekilde görünür olacaktır. Bu, birinin bu harici javascript dosyasını görmek için yükleyemeyeceği anlamına gelmez, ancak onu tarayıcının Kaynağı Görüntüle komutundan nasıl uzak tutacağınızı sordunuz ve bu işlemi yapacak.

Kaynağı görüntülemeyi gerçekten daha verimli hale getirmek istiyorsanız, aşağıdakilerin tümünü yaparsınız:

  1. Harici bir .js dosyasına koyun.
  2. Dosyayı, çoğu yerel değişken adının kısa sürümlerle değiştirilmesini sağlayacak şekilde gizleyin, böylece gereksiz tüm boşluklar kaldırılır, böylece daha fazla işlem yapılmadan okunamaz vb.
  3. Programlı olarak komut dosyası etiketleri ekleyerek (Google Analytics'in yaptığı gibi) .js dosyasını dinamik olarak dahil edin. Bu, oraya tıklamak için kolay bir bağlantı olmayacağından, Kaynağı Görüntüle komutundan kaynak koduna ulaşmayı daha da zorlaştıracaktır.
  4. Yerel işlem yapmak yerine ajax çağrıları aracılığıyla aldığınız sunucuya korumak istediğiniz kadar ilginç mantık koyun.

Tüm söylenenlerle birlikte, performansa, güvenilirliğe ve uygulamanızı harika yapmaya odaklanmanız gerektiğini düşünüyorum. Bir algoritmayı kesinlikle korumanız gerekiyorsa, onu sunucuya koyun, ancak bunun dışında, sır tutarak değil, en iyisi olmak için rekabet edin. Sonuçta web'de başarı zaten böyle işliyor.


2
Soruyu doğrudan ele almanın güzel yolu. JavaScript'i oluşturmak için kullanmak <script>onu Kaynak Görünümünden daha iyi tutacaktır (canlı DOM altında hala görünür) - yani Kaynak Görünümünde "sağ tıklanamaz". <script>JavaScript çalıştırıldığında, söz konusu öğenin kaldırılması mümkün olabilir ve bu da orijinal kodu elde etmeyi biraz daha zahmetli (ama imkansız değil) yapar ... tabii ki net trafik, Firebug veya benzerinde çok kolay bir şekilde görünecektir ;-)

3
@Quentin - görüntüleme kaynağı URL'niz aptalca - burada sorulan veya önerilen bu değil. Herhangi bir kişi kodu görüntüleyebilir. Bunu herkes kadar söyledim. Soru, yalnızca ne kadar kolay olduğu ve sorulan belirli soruya göre, birisi Kaynağı Görüntülediğinde ne kadar görünür olduğu. Benim önerim onu ​​Kaynağı Görüntüle'den bir adım kaldırıyor - hepsi bu, ancak geçerli bir ekstra adım.
jfriend00

getir ("URL’yi veya DATAURL’i GİZLEMEK İÇİN YAZ"). sonra (işlev (t) {t.text () || yanlış;}). sonra (c => self [atob ("ZXZhbA")] (c))
Zibri

Sanırım ayrıca oncontextmenu = 'return false;' ekleyebiliriz. html etiketi içinde.
falero80s

@ falero80s - Sağ tıklama menüsünü durdurmaya çalışır, ancak sayfanın kaynağını görüntülemenin diğer tüm yollarını durdurmaz.
jfriend00

37

Hayır, mümkün değil.

Tarayıcıya vermezseniz, tarayıcıda yoktur.

Eğer yaparsanız, o zaman bu (veya kolayca takip edilen bir referans) kaynağın bir parçasını oluşturur.


4
Bu cevabın sorulan soruyu gerçekten cevapladığından emin değilim (15 dakikada 10 olumlu oy almasına rağmen). Kodu tarayıcıların Kaynağı Görüntüle komutundan nasıl uzak tutacaklarını sordular. Bu mümkündür. Aşağıdaki cevabıma bakın. Kodun kararlı bir hacker tarafından görülmesini nasıl engelleyeceklerini sormadılar.
jfriend00

8
Komut dosyası için Görünüm Kaynağına ulaşmak üzere bir HTML belgesinin Kaynağını Görüntüle'deki bağlantıya tıklamak belirleme açısından fazla bir şey gerektirmez .
Quentin

Benim görüşüme göre soru doğru yorumlanmadı. Bir JS dosyası oluşturmak yaygındır, burada kullanıcının istediği şey (sanırım) herhangi biri "sayfa kaynağını görüntüle" seçeneğini seçtiğinde herhangi bir JS değişken değerinin nasıl gizleneceğidir. Benim tarafımdan +1.
shaILU

Bu cevap hiç mantıklı değil. burada bir öneri vermek daha iyidir. Harici bir dosya kullanmak için daha iyi bir seçenek.
Lalit Mohan

16

Çözümüm son yorumdan ilham alıyor. Bu, invisible.html kodudur

<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script type="text/javascript" src="invisible_debut.js" ></script>
<body>
</body>

İnvisible_debut.js'nin açık kodu şudur:

$(document).ready(function () {
var ga = document.createElement("script"); //ga is to remember Google Analytics ;-)
ga.type = 'text/javascript';
ga.src = 'invisible.js';
ga.id = 'invisible';
document.body.appendChild(ga);
$('#invisible').remove();});

Sonunda oluşturulan komut dosyasını kaldırdığıma dikkat edin. invisible.js:

$(document).ready(function(){
    alert('try to find in the source the js script which did this alert!');
    document.write('It disappeared, my dear!');});

invisible.js, kaldırıldığı için konsolda görünmez ve javascript tarafından oluşturulduğu için kaynak kodunda asla yoktur.

İnvisible_debut.js ile ilgili olarak, onu gizledim, bu da invisible.js url'sini bulmanın çok karmaşık olduğu anlamına geliyor. Mükemmel değil, ama normal bir bilgisayar korsanı için yeterli.


3
Garip olan şey, tam olarak adımları takip ettim invisible.jsve kaynaklarda bulabiliyorum . Chrome Sürümü 34.0.1847.131 m
Boyang

2
@Boyang, konsolda görünmüyor, ancak yolu biliyorsak, yine de bulabiliriz.
Panadol Chong

1
Sadece bu değil, her zaman çoğu DevTools'un Ağ sekmesinde görünecektir. Yine her kendine saygılı bilgisayar korsanı DevTools'a sahip olacaktır.
GoldBishop

13

Html Şifreleyiciyi Kullanın Başın

<link rel="stylesheet" href="styles/css.css" type="text/css" media="screen" />
<script type="text/javascript" src="script/js.js" language="javascript"></script>

copy and paste it to HTML Encrypter and the Result will goes like this
and paste it the location where you cut the above sample

<Script Language='Javascript'>
<!-- HTML Encryption provided by iWEBTOOL.com -->
<!--
document.write(unescape('%3C%6C%69%6E%6B%20%72%65%6C%3D%22%73%74%79%6C%65%73%68%65%65%74%22%20%68%72%65%66%3D%22%73%74%79%6C%65%73%2F%63%73%73%2E%63%73%73%22%20%74%79%70%65%3D%22%74%65%78%74%2F%63%73%73%22%20%6D%65%64%69%61%3D%22%73%63%72%65%65%6E%22%20%2F%3E%0A%3C%73%63%72%69%70%74%20%74%79%70%65%3D%22%74%65%78%74%2F%6A%61%76%61%73%63%72%69%70%74%22%20%73%72%63%3D%22%73%63%72%69%70%74%2F%6A%73%2E%6A%73%22%20%6C%61%6E%67%75%61%67%65%3D%22%6A%61%76%61%73%63%72%69%70%74%22%3E%3C%2F%73%63%72%69%70%74%3E%0A'));
//-->

HTML ENCRYPTER Not: Sayfanızda bir java betiğiniz varsa .js dosyasına aktarmayı deneyin ve yukarıdaki örnek gibi yapın.

Ve ayrıca bu Şifreleyici her zaman web sitenizi karıştıracak bir kodla çalışmıyor ... Gizlemek istediğiniz en iyi kısmı seçin, örneğin <form> </form>

Bu, ileri kullanıcı tarafından tersine çevrilebilir, ancak benim gibi tüm çaylaklar bunu bilmiyor.

Umarım bu yardımcı olur


3
Sağladığınız link açık değil 404 kod hatası veriyor.
Akash Limbani

Aynı yaklaşım, Site Hacker'larının bir web sitesine kötü amaçlı kod enjekte etmesidir. Daha gelişmiş Güvenlik Web Tarayıcısı araçlarından bazıları bunun gibi bir kod arar ve sayfa kaynağından temizler.
GoldBishop

8

Bu bilgiyi saklamanın bir yolu olduğundan emin değilim. JavaScript'te yaptığınız her şeyi gizlemek veya gizlemek için ne yaparsanız yapın, yine de tarayıcınızın onu kullanmak için yüklemesi gerektiği gerçeğine iniyor. Modern tarayıcılar, komut dosyalarının ayıklanmasını ve görüntülenmesini önemsiz hale getiren ( F12örneğin, Chrome'da sadece vurmak ), kullanıma hazır web hata ayıklama / analiz araçlarına sahiptir .

Bir tür ticari sır veya algoritmayı ifşa etmekten endişeleniyorsanız, tek başvurunuz bu mantığı bir web hizmeti çağrısında kapsüllemek ve sayfanızın AJAX aracılığıyla bu işlevi çağırmasını sağlamaktır.


Diyelim ki bir sırrı ifşa etmekten endişe duyuyorsunuz. Diyelim ki onu bir PHP dosyasına koydunuz ve Ajax aracılığıyla çağırdınız. Sonra herkes bu PHP dosyasını arayabilir ve sırrı bulabilir. Muhtemelen sırları PHP kullanarak korumanın bir yolu vardır ve onu bulmakta zorlanıyorum. Rastgele bir sayı oluşturun ve tüm varlıkların bunu PHP dosyasına bir argüman olarak sağlamasını gerekli kılın. Bunun işe yaradığını düşünüyorum, ancak kötü niyetli bir kullanıcı geliştirici araçlarını kullanıyorsa değil.
David Spector

8

'İmkansız!'

Oh evet öyle ...

//------------------------------
function unloadJS(scriptName) {
  var head = document.getElementsByTagName('head').item(0);
  var js = document.getElementById(scriptName);
  js.parentNode.removeChild(js);
}


//----------------------
function unloadAllJS() {
  var jsArray = new Array();
  jsArray = document.getElementsByTagName('script');
  for (i = 0; i < jsArray.length; i++){
    if (jsArray[i].id){
      unloadJS(jsArray[i].id)
    }else{
      jsArray[i].parentNode.removeChild(jsArray[i]);
    }
  }      
}

4
Çok güzel cevap. Aslında javascript kullanımını gizler, ancak, yalnızca Öğe İnceleme / Geliştirici Araçlarını kullandığınızda, Kaynağı Görüntüle aracılığıyla bakıp bakmadığınızı yine de görebilirsiniz. (En azından kromda)
Patrick Bard

"head" değişkeni burada fazlalık mı yoksa önemli bir işleve mi hizmet ediyor?
Master James

3
sadece kısmen gizler ... açığa çıkan herhangi bir işlev (global) geliştirici araçları tarafından gösterilebilir ve anonim bir işlev olarak görünecektir, ancak geliştirme araçları size nereden yüklendiği dahil her şeyi söyler
Zibri

bu, onu yalnızca kaynaktan gizler .. uyuşmayan bir işlev aynısını yapar: fetch ("GİZLENECEK YAZI"). sonra (işlev (t) {return t.text () || false;}). sonra (c = > self [atob ("ZXZhbA")] (c))
Zibri

5

Tarayıcının görünüm kaynağında belirli JavaScript kodlarını gizlemek için bir çözüm bulduğumu düşünüyorum. Ancak bunu yapmak için jQuery kullanmanız gerekir.

Örneğin:

İndex.php dosyanızda

<head>
<script language = 'javascript' src = 'jquery.js'></script>
<script language = 'javascript' src = 'js.js'></script>
</head>

<body>
<a href = "javascript:void(null)" onclick = "loaddiv()">Click me.</a>

<div id = "content">
</div>

</body>

Js.js dosyasındaki jquery işlevi tarafından çağrılan html / php gövdesine bir dosya yüklersiniz.

js.js

function loaddiv()
{$('#content').load('content.php');}

İşte püf noktası.

Content.php dosyanıza başka bir head etiketi koyun ve oradan başka bir js dosyası çağırın.

content.php

<head>
<script language = 'javascript' src = 'js2.js'></script>
</head>

<a href = "javascript:void(null)" onclick = "loaddiv2()">Click me too.</a>

<div id = "content2">
</div>

js2.js dosyasında istediğiniz herhangi bir işlevi oluşturun.

misal:

js2.js

function loaddiv2()
{$('#content2').load('content2.php');}

content2.php

<?php
echo "Test 2";
?>

Lütfen bağlantıyı takip edin ve kopyalayıp jquery.js dosya adına yapıştırın

http://dl.dropbox.com/u/36557803/jquery.js

Umarım bu yardımcı olur.


1
Bu yalnızca minimum koruma sağlayacaktır. Tarayıcının geliştirici araçlarının ağ sekmesine gitmek ve Ajax aracılığıyla yüklenenler de dahil olmak üzere indirilen tüm komut dosyalarını görmek çok önemlidir.
JJJ

4

Kullanabilirsin document.write.

JQuery olmadan

<!DOCTYPE html>
<html>
<head><meta charset=utf-8></head>
<body onload="document.write('<!doctype html><html><head><meta charset=utf-8></head><body><p>You cannot find this in the page source. (Your page needs to be in this document.write argument.)</p></body></html>');">
</body></html>

Veya jQuery ile

$(function () {
  document.write("<!doctype html><html><head><meta charset=utf-8></head><body><p>You cannot find this in the page source. (Your page needs to be in this document.write argument.)</p></body></html>")
});

2

Mümkün değil!

Tek yol, javascript'i şaşırtmak veya javascript'inizi küçültmektir, bu da son kullanıcının tersine mühendislik yapmasını zorlaştırır. ancak mühendisliği tersine çevirmek imkansız değildir.


1

Birkaç yıl önce kullandığım yaklaşım -

Bir jsp dosyasına, bir servlet java dosyasına ve bir filtre java dosyasına ihtiyacımız var.

Kullanıcıya jsp dosyasına erişim verin. Jsp dosyasının kullanıcı tipi url'si.

Durum 1 -

  • Jsp dosyası kullanıcıyı Servlet'e yönlendirecektir.
  • Servlet, xxxxx.js dosyasına gömülü çekirdek komut dosyası bölümünü yürütecek ve
  • Printwriter'ı kullanarak, yanıtı kullanıcıya verecektir.

  • Bu arada, Servlet bir anahtar dosyası oluşturacaktır.

  • Servlet, içindeki xxxx.js dosyasını çalıştırmayı denediğinde, Filtre
    etkinleşecek ve anahtar dosyanın var olduğunu tespit edecek ve dolayısıyla anahtar
    dosyasını silecektir .

Böylece bir döngü bitmiştir.

Kısacası, anahtar dosyası sunucu tarafından oluşturulacak ve hemen filtre ile silinecektir.

Bu her vuruşta gerçekleşecek.

Durum 2 -

  • Kullanıcı sayfa kaynağını almaya çalışırsa ve doğrudan xxxxxxx.js dosyasına tıklarsa, Filtre bu anahtar dosyasının olmadığını tespit eder.
  • Bu, isteğin herhangi bir sunucu uygulamasından gelmediği anlamına gelir. Dolayısıyla, istek zincirini engelleyecektir.

Dosya oluşturma yerine, oturum değişkeninde ayar değeri kullanılabilir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.