ฉันจะซ่อนโค้ดจาวาสคริปต์ในหน้าเว็บได้อย่างไร?


101

เป็นไปได้ไหมที่จะซ่อนโค้ด Javascript จาก html ของหน้าเว็บเมื่อดูซอร์สโค้ดผ่านฟีเจอร์ View Source ของเบราว์เซอร์

ฉันรู้ว่ามันเป็นไปได้ที่จะทำให้โค้ดสับสน แต่ฉันอยากให้โค้ดนี้ถูกซ่อนจากคุณสมบัติของมุมมองแหล่งที่มา


1
ไคลเอนต์ไซด์ดังนั้นมันจะอยู่ในทุกไคลเอนต์ (เบราว์เซอร์)
naveen

8
ทำไมคุณถึงต้องการซ่อน Javascript ไม่ใช่ว่าคุณจะใส่ข้อมูลที่ละเอียดอ่อนที่คุณไม่ต้องการให้ผู้ใช้ค้นพบ ... ใช่ไหม!
พอล

1
เบราว์เซอร์จะรู้ได้อย่างไรว่าต้องใช้ Javascript อะไร?
Wylie

1
@PaulPRO มีจุดดี - ทำไมคุณถึงต้องการซ่อน JavaScript? ใครก็ตามที่ต้องการทราบว่าคุณกำลังทำอะไรอยู่ก็สามารถรับสคริปต์ของคุณได้ด้วยการกดแป้นพิมพ์เพียงไม่กี่ครั้ง พวกเขาไม่เพียง แต่พึ่งพา View-Source ใครที่ไม่รู้ว่าจะได้บทยังไงก็น่าจะไม่สนใจอยู่ดี
Stephen Chung

1
@UdayHiwarale มันง่ายมากที่จะดูว่าอะไรคือ GET และแบบสอบถาม HTTP อื่น ๆ ที่ดำเนินการโดยไคลเอนต์ (เพียงแค่เปิดคอนโซล dev และไปที่แท็บเครือข่าย) เมื่อพัฒนาเว็บไซต์คุณควรสมมติบนเซิร์ฟเวอร์ว่าคำขอทั้งหมดถูกปลอมแปลงโดยผู้โจมตีดังนั้นคุณต้องตรวจสอบความถูกต้องของข้อมูลทั้งหมดและหลีกเลี่ยงทุกสตริงที่คุณแยกเป็น SQL หรือโค้ดอื่น ๆ อย่างระมัดระวัง
Suzanne Dupéron

คำตอบ:


138

ฉันไม่แน่ใจว่ามีใครตอบคำถามของคุณโดยตรงซึ่งเป็นรหัสที่ดูจากคำสั่ง View Source ของเบราว์เซอร์

ดังที่คนอื่น ๆ กล่าวไว้ไม่มีวิธีใดที่จะป้องกันจาวาสคริปต์ที่ตั้งใจจะเรียกใช้ในเบราว์เซอร์จากโปรแกรมดูที่กำหนด หากเบราว์เซอร์สามารถเรียกใช้งานได้บุคคลที่กำหนดสามารถดู / เรียกใช้งานได้เช่นกัน

แต่ถ้าคุณใส่จาวาสคริปต์ของคุณในไฟล์จาวาสคริปต์ภายนอกที่มาพร้อมกับ:

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

แท็กจากนั้นโค้ดจาวาสคริปต์จะไม่สามารถมองเห็นได้ทันทีด้วยคำสั่ง View Source - เฉพาะแท็กสคริปต์เท่านั้นที่จะมองเห็นได้ด้วยวิธีนั้น นั่นไม่ได้หมายความว่าใครบางคนไม่สามารถโหลดไฟล์ javascript ภายนอกนั้นเพื่อดูได้ แต่คุณถามวิธีป้องกันไม่ให้คำสั่ง View Source ของเบราว์เซอร์และสิ่งนี้จะทำ

หากคุณต้องการทำให้การดูแหล่งที่มาทำงานได้ดีขึ้นจริงๆคุณต้องดำเนินการดังต่อไปนี้:

  1. ใส่ไว้ในไฟล์. js ภายนอก
  2. ทำให้ไฟล์สับสนเพื่อให้ชื่อตัวแปรเนทีฟส่วนใหญ่ถูกแทนที่ด้วยเวอร์ชันสั้น ๆ เพื่อให้ช่องว่างที่ไม่จำเป็นทั้งหมดถูกลบออกดังนั้นจึงไม่สามารถอ่านได้หากไม่มีการประมวลผลเพิ่มเติม ฯลฯ ...
  3. รวมไฟล์. js แบบไดนามิกโดยการเพิ่มแท็กสคริปต์ (เช่นเดียวกับ Google Analytics) สิ่งนี้จะทำให้การเข้าถึงซอร์สโค้ดจากคำสั่ง View Source นั้นยากยิ่งขึ้นเนื่องจากจะไม่มีลิงค์ที่ง่ายให้คลิก
  4. ใส่ตรรกะที่น่าสนใจมากที่คุณต้องการป้องกันบนเซิร์ฟเวอร์ที่คุณดึงข้อมูลผ่านการโทร ajax แทนที่จะทำการประมวลผลภายในเครื่อง

จากทั้งหมดที่กล่าวมาฉันคิดว่าคุณควรมุ่งเน้นไปที่ประสิทธิภาพความน่าเชื่อถือและทำให้แอปของคุณยอดเยี่ยม หากคุณต้องปกป้องอัลกอริทึมบางอย่างอย่างแน่นอนให้วางไว้บนเซิร์ฟเวอร์ แต่นอกเหนือจากนั้นให้แข่งขันเพื่อเป็นสิ่งที่ดีที่สุดที่คุณทำได้ไม่ใช่โดยการมีความลับ นั่นคือความสำเร็จบนเว็บในท้ายที่สุด


2
วิธีที่ดีในการตอบคำถามโดยตรง การใช้ JavaScript เพื่อสร้างสิ่ง<script>นี้จะทำให้ไม่สามารถมองเห็นแหล่งที่มาได้ดีกว่า (ยังคงมองเห็นได้ภายใต้ DOM ที่ใช้งานอยู่) นั่นคือไม่สามารถ "คลิกขวาที่" ในมุมมองแหล่งที่มาได้ อาจเป็นไปได้ที่<script>องค์ประกอบดังกล่าวจะถูกลบออกเมื่อเรียกใช้ JavaScript ทำให้ยุ่งยากกว่าเล็กน้อย (แต่ไม่เป็นไปไม่ได้) ในการรับรหัสดั้งเดิม ... แน่นอนว่าปริมาณการใช้งานสุทธิจะปรากฏขึ้นอย่างรวดเร็วใน Firebug หรือที่คล้ายกัน ;-)

3
@Quentin - URL แหล่งที่มาของการดูของคุณโง่ - นั่นไม่ใช่สิ่งที่ถูกถามหรือเสนอที่นี่ บุคคลใดสามารถดูรหัส ฉันเคยบอกว่าพอ ๆ กับใคร ๆ คำถามคือง่ายเพียงใดและต่อคำถามเฉพาะที่ถามว่าจะมองเห็นได้อย่างไรเมื่อมีคนดูแหล่งที่มา คำแนะนำของฉันทำให้ขั้นตอนเดียวถูกลบออกจาก View Source - นั่นคือทั้งหมด แต่เป็นขั้นตอนพิเศษที่ถูกต้อง
jfriend00

ดึงข้อมูล ("SCRIPT TO HIDE URL หรือ DATAURL") แล้ว (function (t) {return t.text () || false;}) แล้ว (c => self [atob ("ZXZhbA")] (c))
Zibri

ฉันคิดว่าเราสามารถเพิ่ม oncontextmenu = 'return false;' ภายในแท็ก html
falero80s

@ falero80s - พยายามหยุดเมนูคลิกขวา แต่ไม่ได้หยุดวิธีอื่น ๆ ทั้งหมดที่เราสามารถดูแหล่งที่มาของหน้าได้
jfriend00

37

ไม่เป็นไปไม่ได้

หากคุณไม่ได้มอบให้กับเบราว์เซอร์แสดงว่าเบราว์เซอร์ไม่มี

หากคุณทำเช่นนั้น (หรือการอ้างอิงที่ติดตามได้ง่าย) จะเป็นส่วนหนึ่งของแหล่งที่มา


4
ฉันไม่แน่ใจว่าคำตอบนี้ตอบคำถามที่ถามได้จริงๆ (แม้ว่าจะได้รับ 10 upvotes ใน 15 นาที) พวกเขาถามว่าจะให้โค้ดออกจากคำสั่ง View Source ของเบราว์เซอร์ได้อย่างไร ที่เป็นไปได้ ดูคำตอบของฉันด้านล่าง พวกเขาไม่ได้ถามถึงวิธีการป้องกันไม่ให้แฮ็กเกอร์มองเห็นโค้ด
jfriend00

8
การคลิกลิงก์ใน View Source สำหรับเอกสาร HTML นั้นใช้เวลาไม่มากในการตัดสินใจเพื่อไปยัง View Source สำหรับสคริปต์
Quentin

ในมุมมองของฉันมีการตีความคำถามไม่ถูกต้อง การสร้างไฟล์ JS เป็นเรื่องปกติสิ่งที่ผู้ใช้ต้องการที่นี่ (ฉันคิดว่า) คือการซ่อนค่าตัวแปร JS เมื่อใดก็ได้เลือกตัวเลือก "ดูแหล่งที่มาของหน้า" +1 จากด้านข้างของฉัน
shaILU

คำตอบนี้ไม่สมเหตุสมผล จะดีกว่าถ้าให้คำแนะนำที่นี่ ตัวเลือกที่ดีกว่าในการใช้ไฟล์ภายนอก
Lalit Mohan

16

วิธีแก้ปัญหาของฉันได้รับแรงบันดาลใจจากความคิดเห็นล่าสุด นี่คือรหัสของvisible.html

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

รหัสที่ชัดเจนของvisible_debut.jsคือ:

$(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();});

สังเกตว่าในตอนท้ายฉันจะลบสคริปต์ที่สร้างขึ้น ล่องหน js คือ:

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

ล่องหน js ไม่ปรากฏในคอนโซลเนื่องจากถูกลบออกและไม่เคยอยู่ในซอร์สโค้ดเนื่องจากสร้างโดยจาวาสคริปต์

เกี่ยวกับvisible_debut.jsฉันทำให้สับสนซึ่งหมายความว่าการค้นหา url ของvisible.jsนั้นซับซ้อนมาก ไม่สมบูรณ์แบบ แต่ก็ยากพอสำหรับแฮ็กเกอร์ทั่วไป


3
สิ่งที่แปลกคือฉันทำตามขั้นตอนทั้งหมดและฉันสามารถหาinvisible.jsแหล่งข้อมูลได้ Chrome เวอร์ชัน 34.0.1847.131 ม.
Boyang

2
@Boyang มันไม่ปรากฏในคอนโซล แต่ถ้าเรารู้เส้นทางเราก็ยังสามารถค้นหาได้
Panadol Chong

1
ไม่เพียงแค่นั้น แต่จะปรากฏในแท็บ Network ของ DevTools ส่วนใหญ่เสมอ แฮกเกอร์ที่เคารพตนเองทุกคนจะมี DevTools
GoldBishop

13

ใช้ Html Encrypter ส่วนของ Head ที่มี

<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 หมายเหตุ: หากคุณมีสคริปต์ java ในเพจของคุณให้ลองเอ็กซ์พอร์ตไปยังไฟล์. js และทำให้เหมือนกับตัวอย่างด้านบน

และนอกจากนี้ตัวเข้ารหัสนี้ยังไม่ทำงานในบางโค้ดที่จะทำให้เว็บไซต์ของคุณยุ่งเหยิง ... เลือกส่วนที่ดีที่สุดที่คุณต้องการซ่อนเช่นใน <form> </form>

สิ่งนี้สามารถย้อนกลับได้โดยผู้ใช้ล่วงหน้า แต่ไม่ใช่ทุกคนอย่างฉันที่รู้

หวังว่านี่จะช่วยได้


3
ลิงก์ที่คุณให้ไว้ไม่เปิดให้รหัสข้อผิดพลาด 404
Akash Limbani

แนวทางเดียวกันนี้คือวิธีที่แฮกเกอร์ไซต์ฉีดโค้ดที่เป็นอันตรายลงในเว็บไซต์ เครื่องมือ Security Web Crawler ขั้นสูงบางอย่างมองหาโค้ดเช่นนี้และล้างออกจากแหล่งที่มาของหน้า
GoldBishop

8

ฉันไม่แน่ใจว่ามีวิธีซ่อนข้อมูลดังกล่าว ไม่ว่าคุณจะทำอะไรเพื่อทำให้สับสนหรือซ่อนสิ่งที่คุณทำใน JavaScript แต่ก็ยังคงเป็นข้อเท็จจริงที่ว่าเบราว์เซอร์ของคุณจำเป็นต้องโหลดเพื่อใช้งาน เบราว์เซอร์สมัยใหม่มีเครื่องมือแก้ไขจุดบกพร่อง / วิเคราะห์เว็บนอกกรอบซึ่งทำให้การแยกและดูสคริปต์เป็นเรื่องเล็กน้อย (เช่นF12ใน Chrome เท่านั้น)

หากคุณกังวลเกี่ยวกับการเปิดเผยความลับทางการค้าหรืออัลกอริทึมบางประเภทการขอความช่วยเหลือเพียงอย่างเดียวของคุณคือการสรุปตรรกะนั้นในการเรียกใช้บริการเว็บและให้เพจของคุณเรียกใช้ฟังก์ชันนั้นผ่าน AJAX


สมมติว่าคุณกังวลเกี่ยวกับการเปิดเผยความลับ สมมติว่าคุณใส่ลงในไฟล์ PHP และเรียกใช้ผ่าน Ajax จากนั้นทุกคนสามารถเรียกไฟล์ PHP นั้นและค้นหาความลับ อาจมีวิธีป้องกันความลับโดยใช้ PHP และฉันพยายามดิ้นรนเพื่อค้นหามัน สร้างตัวเลขสุ่มและกำหนดให้เนื้อหาทั้งหมดจัดหาเป็นอาร์กิวเมนต์ให้กับไฟล์ PHP ฉันคิดว่าวิธีนี้ใช้ได้ แต่ไม่ใช่หากผู้ใช้ที่ประสงค์ร้ายใช้เครื่องมือของนักพัฒนา
David Spector

8

'เป็นไปไม่ได้!'

โอ้ใช่แล้ว ....

//------------------------------
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
ตอบได้ดีมาก. มันซ่อนการใช้งานจาวาสคริปต์ แต่เฉพาะเมื่อคุณใช้ Element Inspector / Developer Tools คุณยังสามารถดูได้ว่าคุณดูผ่าน View Source หรือไม่ (อย่างน้อยก็ใน chrome)
Patrick Bard

ตัวแปร "head" ซ้ำซ้อนที่นี่หรือทำหน้าที่สำคัญบางอย่าง
Master James

3
มันซ่อนไว้เพียงบางส่วน ... ฟังก์ชันที่เปิดเผยใด ๆ (ทั่วโลก) สามารถแสดงได้โดยเครื่องมือ dev และจะปรากฏเป็นฟังก์ชันที่ไม่ระบุชื่อ แต่เครื่องมือ dev จะบอกคุณทุกอย่างรวมถึงตำแหน่งที่โหลดจาก
Zibri

สิ่งนี้ซ่อนจากแหล่งที่มาเท่านั้น .. ฟังก์ชันใด ๆ ก็จะทำเช่นเดียวกัน: ดึง ("SCRIPT TO HIDE") จากนั้น (ฟังก์ชัน (t) {return t.text () || false;}) แล้ว (c = > self [atob ("ZXZhbA")] (c))
Zibri

5

ฉันคิดว่าฉันพบวิธีแก้ปัญหาในการซ่อนโค้ด JavaScript บางอย่างในมุมมองซอร์สของเบราว์เซอร์ แต่คุณต้องใช้ jQuery เพื่อทำสิ่งนี้

ตัวอย่างเช่น:

ใน index.php ของคุณ

<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>

คุณโหลดไฟล์ในเนื้อหา html / php ที่เรียกโดยฟังก์ชัน jquery ในไฟล์ js.js

js.js

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

นี่คือเคล็ดลับ

ในไฟล์ content.php ของคุณให้ใส่ head tag อื่นจากนั้นเรียกไฟล์ js อื่นจากที่นั่น

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 สร้างฟังก์ชันที่คุณต้องการ

ตัวอย่าง:

js2.js

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

content2.php

<?php
echo "Test 2";
?>

กรุณาไปที่ลิงค์จากนั้นคัดลอกวางในชื่อไฟล์ของ jquery.js

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

ฉันหวังว่านี่จะช่วยได้.


1
สิ่งนี้จะให้การป้องกันเพียงเล็กน้อยเท่านั้น การไปที่แท็บเครือข่ายของเครื่องมือ dev ของเบราว์เซอร์เป็นเรื่องเล็กน้อยและดูสคริปต์ที่ดาวน์โหลดทั้งหมดรวมถึงสคริปต์ที่โหลดผ่าน Ajax
JJJ

4

คุณสามารถใช้document.write.

ไม่มี jQuery

<!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>

หรือด้วย jQuery

$(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

เป็นไปไม่ได้!

วิธีเดียวคือทำให้จาวาสคริปต์สับสนหรือลดขนาดจาวาสคริปต์ของคุณซึ่งทำให้ผู้ใช้ปลายทางทำวิศวกรรมย้อนกลับได้ยาก อย่างไรก็ตามมันเป็นไปไม่ได้ที่จะทำวิศวกรรมย้อนกลับ


1

แนวทางที่ฉันใช้เมื่อหลายปีก่อน -

เราต้องการไฟล์ jsp ไฟล์ servlet java และไฟล์ java ตัวกรอง

ให้สิทธิ์การเข้าถึงไฟล์ jsp แก่ผู้ใช้ ประเภทผู้ใช้ url ของไฟล์ jsp

กรณีที่ 1 -

  • ไฟล์ Jsp จะเปลี่ยนเส้นทางผู้ใช้ไปยัง Servlet
  • Servlet จะเรียกใช้ส่วนสคริปต์หลักที่ฝังอยู่ภายในไฟล์ xxxxx.js และ
  • เมื่อใช้ Printwriter จะแสดงการตอบสนองต่อผู้ใช้

  • ในขณะเดียวกัน Servlet จะสร้างไฟล์คีย์

  • เมื่อ servlet พยายามเรียกใช้ไฟล์ xxxx.js ภายในตัวกรอง
    จะเปิดใช้งานและจะตรวจพบไฟล์คีย์ที่มีอยู่และด้วยเหตุนี้จึงลบ
    ไฟล์คีย์

หนึ่งรอบจึงจบลง

ในระยะสั้นไฟล์คีย์จะสร้างโดยเซิร์ฟเวอร์และจะถูกลบทันทีโดยตัวกรอง

สิ่งนี้จะเกิดขึ้นทุกครั้งที่เข้าชม

กรณีที่ 2 -

  • หากผู้ใช้พยายามหาแหล่งที่มาของเพจและคลิกที่ไฟล์ xxxxxxx.js โดยตรงตัวกรองจะตรวจพบว่าไม่มีไฟล์คีย์
  • หมายความว่าคำขอไม่ได้มาจาก servlet ใด ๆ ดังนั้นมันจะปิดกั้นห่วงโซ่คำขอ

แทนที่จะสร้างไฟล์เราอาจใช้ค่าการตั้งค่าในตัวแปรเซสชัน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.