স্ট্রিং হিসাবে সঞ্চিত জাভাস্ক্রিপ্ট কোডটি কার্যকর করুন


173

আমি কীভাবে কিছু জাভাস্ক্রিপ্ট কার্যকর করব যেটি একটি স্ট্রিং?

function ExecuteJavascriptString()
{
    var s = "alert('hello')";
    // how do I get a browser to alert('hello')?
}

উত্তর:


227

সঙ্গে eval("my script here")ফাংশন।


11
সাবধান ! এই কোডটি কার্যকর করবে তাই আপনি / এই স্ট্রিংটি কীভাবে পেয়েছেন সে সম্পর্কে সতর্ক হন। মনে রাখবেন যে কেউ আপনার স্ট্রিংয়ের ভিতরে দূষিত কোড toোকানোর চেষ্টা করতে পারে।
জন

@ ডিভিঞ্চি এটিকে "ক্রস সাইট স্ক্রিপ্টিং" বলা হয়। এখানে দেখুন: en.wikedia.org/wiki/Cross-site_scriptting
ব্রেন্ডন শ

134

আপনি একটি ফাংশন ব্যবহার করে এটি সম্পাদন করতে পারেন। উদাহরণ:

var theInstructions = "alert('Hello World'); var x = 100";

var F=new Function (theInstructions);

return(F());

3
কিন্তু শেষ পর্যন্ত - কল করার মতো নয় var F=function(){eval(theInstructions);};?
জার্ন বার্কেফেল্ড

14
হ্যাঁ এবং না: এভাল কোড সহ কার্যকর করা হবে, যখন ফাংশন () কোডের সাথে এফ () ব্যবহার না করে (ব্যবহারের ক্ষেত্রে? সিনট্যাক্স ত্রুটির জন্য পরীক্ষা করুন তবে কোডটি কার্যকর করতে চান না)
G3z

2
@ স্টেফান এটি বিটিফুল ...new Function("alert('Hello World');")()
আন্দ্রেস

আমি এটি চেষ্টা / ক্যাচ ব্লকের ভিতরে চেষ্টা করেছি এবং এটি পুরোপুরি কার্যকর হয়। আমি এখন কোনও পাঠ্য ব্লকে টাইপ করা জাভাস্ক্রিপ্ট কোডটি নিতে পারি, এটি আমার ফাংশনে পাস করতে এবং এটি সম্পাদন করতে পারি। ক্যাচ ব্লকটি তখন জাভাস্ক্রিপ্ট ইঞ্জিন থেকে একটি ডিওএম উপাদানটিতে ত্রুটি বার্তা সন্নিবেশ করতে পারে এবং কোডটিতে কোনও ত্রুটি প্রদর্শন করতে পারে। যদি কেউ আমার লেখা ফাংশনটি চায়, তবে আমি একবার এটি পরিষ্কার করে বললে, আমি এটি এখানে পোস্ট করতে পারি।
ডেভিড এডওয়ার্ডস

@ ডেভিডএডওয়ার্ডস যদি আপনার এখনও এটি থাকে এবং এটি পোস্ট করেন তবে দুর্দান্ত লাগবে।
অনূপ

60

evalফাংশন একটি স্ট্রিং, যাতে এটি পাস করা হয়েছে মূল্যায়ন করবো।

তবে ব্যবহার evalবিপজ্জনক হতে পারে , তাই সাবধানতার সাথে ব্যবহার করুন।

সম্পাদনা: আননাকাটার একটি ভাল পয়েন্ট রয়েছে - এটি কেবল eval বিপজ্জনক নয় , এটি ধীর । এটি কারণ যাচাই করার কোডটি অবশ্যই স্পটটিতে পার্স করা উচিত, যাতে কিছু কম্পিউটিং সংস্থান লাগবে।


34
অতি বিপজ্জনক এবং ধীর - আপনার
গা bold়

5
আমি সন্দেহবাদী যে এটি পৃষ্ঠাতে অন্য কোথাও জাভাস্ক্রিপ্ট লোড করার চেয়ে ধীর গতির, এটিও পার্স করতে হবে। যদি এটি ধীরে ধীরে হয়, কারণ এটি একটি ভিন্ন সুযোগে সম্পন্ন হয়েছে, যা সেই সুযোগের জন্য সংস্থান তৈরি করতে বাধ্য করতে পারে।
সিজিপি

6
আপনি যদি বলেন eval()বিপজ্জনক। কোন বিকল্প আছে?
হোয়াইট_জেকো 22'12

4
@ কুবার্ড আমি জানি এটি একটু দেরী হয়েছে তবে কেন এটি বিপজ্জনক? কনসোল ব্যবহার করে ব্যবহারকারী সহজেই আপনার ওয়েবসাইটে জাভাস্ক্রিপ্ট কোড চালাতে পারে।
jkd

7
যদি আপনার সুরক্ষা ক্লায়েন্ট-সাইড জাভাস্ক্রিপ্টের উপর পুরোপুরি নির্ভর করে, আপনি বড় সময় কাটিয়ে উঠছেন এবং এটির সাথে বিবর্তনের কিছুই নেই।
ম্যাথু

20

Eval () ব্যবহার করুন।

W3 স্কুল ট্যুর । সাইটের কিছু কার্যকর ব্যবহারযোগ্য উদাহরণ রয়েছে। মোজিলা ডকুমেন্টেশন এটিকে বিস্তারিতভাবে আচ্ছাদন করে।

নিরাপদে এটি ব্যবহার সম্পর্কে আপনি সম্ভবত অনেক সতর্কতা পাবেন । এটি একটি বিশাল সুরক্ষা ইস্যু হওয়ায় ব্যবহারকারীদেরকে কোনও কিছুকেই ইভাল () এ ইনজেক্ট করার অনুমতি দেবেন না

আপনি এটিও জানতে চাইবেন যে evভাল () এর আলাদা সুযোগ রয়েছে


11
w3fools.com । ডাব্লু 3 সি এর কাছেও ইভাল সম্পর্কে কিছু বলার নেই। আপনি যদি কোনও
বার্গি

7
আমি "কিছু কর্মকর্তা লিঙ্ক করতে চান না, আমি পাঠযোগ্য কিছু লিংক চেয়েছিলেন - কি এ খুঁজছি আপনি লিঙ্ক, এটা কিভাবে ব্যবহার করা হয়, কোন উদাহরণ, Tinker কোন উপায় কোন ব্যাখ্যা দেয়, এবং একলা পদ্ধতি বর্ণনা । প্রথমদিকে, এটি সম্পূর্ণ অনুপযুক্ত লিঙ্ক। আরে আপনি @bjorninge হওয়ার কথা হবেন না, আপনি কি করবেন?
সিজিপি

1
evalঅনুমানটি আমার কাছে ডাব্লু 3 স্কুলগুলির নিবন্ধের চেয়ে ভাল বর্ণনা করে । ভাল ব্যাখ্যা এবং উদাহরণ সহ পাঠযোগ্য কিছু হ'ল বিকাশকারী.মোজিলা.আর.ইন.ইউএস / ডকস / ওয়েব / জাভা স্ক্রিপ্ট / রেফারেন্স / । এবং না, আমি জর্জিনিঞ্জ নই
বার্গি

আমি সম্মতি জানাব যে এটি কোনও নথিপত্র নয়, এবং আমি সম্মতি জানাব যে মোজিলার পৃষ্ঠা এটির একটি সামগ্রিক চিত্র। মতামতের উপর ভিত্তি করে আমার উত্তরটি সামান্য টুইট করুন
cgp

1
সেই একমা-ইন্টারন্যাশনাল.ওআর লিঙ্কটি সম্পর্কে, আমি জেএসের সাথে 15 মিনিটেরও বেশি অভিজ্ঞতার সাথে এটি পাঠযোগ্য এবং প্রশংসনীয় হিসাবে বর্ণনা করব। এটা খুব সুন্দর.
i336_

16

এটা চেষ্টা কর:

  var script = "<script type='text/javascript'> content </script>";
  //using jquery next
  $('body').append(script);//incorporates and executes inmediatelly

ব্যক্তিগতভাবে, আমি এটি পরীক্ষা করে দেখিনি তবে কাজ করছে বলে মনে হচ্ছে।


1
আপনি স্ক্রিপ্টে> ক্লোজিং> পলায়ন ভুলে গেছেন: var স্ক্রিপ্ট = "<স্ক্রিপ্ট টাইপ = \" পাঠ্য / জাভাস্ক্রিপ্ট \ "> সামগ্রী </ স্ক্রিপ্ট \>";
rlib

1
কেন আপনার বন্ধ হওয়া এড়াতে হবে?
জুলস

11

@ হোসেইন হাজীজাদে আলেরেডি যা বলেছিল তার মতো কিছুটা , যদিও আরও বিস্তারিতভাবে:

এর বিকল্পও রয়েছে eval()

ফাংশনটি setTimeout()মিলিসেকেন্ডের ব্যবধানের পরে কোনও কিছু সম্পাদন করার জন্য ডিজাইন করা হয়েছে এবং কোডটি সম্পাদন করতে হবে ঠিক তাই স্ট্রিং হিসাবে ফর্ম্যাট করা যায়।

এটি এর মতো কাজ করবে:

ExecuteJavascriptString(); //Just for running it

function ExecuteJavascriptString()
{
    var s = "alert('hello')";
    setTimeout(s, 1);
}

1 মানে স্ট্রিংটি কার্যকর করার আগে এটি 1 মিলিসেকেন্ড অপেক্ষা করবে।

এটি করার সবচেয়ে সঠিক উপায় নাও হতে পারে, তবে এটি কার্যকর হয়।


আপনি যখন 0 (শূন্য) পাস করতে পারেন তখন কেন একটি মিলিসেকেন্ড নষ্ট করবেন setTimeout? নোট করুন যে কোনও ক্ষেত্রে এটি কার্যকর করা হবে অ্যাসিক্রোনাস। এর অর্থ হল যে সমস্ত কোড যা setTimeoutকল অনুসরণ করে তা কোড পাস করার আগেইsetTimeout (যদিও 0 (শূন্য) দিয়ে ডাকা হয়) ডাকা হবে।
জক্স

♀️‍♀️ কেবল ভেবেছিল সেটটাইমআউট কীভাবে কাজ করে তা আরও ভালভাবে ব্যাখ্যা করা হয়েছে
আন্তন জুউল-

8
new Function('alert("Hello")')();

আমি মনে করি এটি সেরা উপায়।


7

নীচে হিসাবে eval ব্যবহার করুন । ইভালটি সাবধানতার সাথে ব্যবহার করা উচিত, " অ্যাভাল ইজ ইজ ইজ ਬੁਰ " সম্পর্কিত একটি সাধারণ অনুসন্ধানে কিছু পয়েন্টার নিক্ষেপ করা উচিত।

function ExecuteJavascriptString()
{
    var s = "alert('hello')";
    eval(s);
}

2
যে ভাল টিপ সম্পর্কে একটি সহজ অনুসন্ধান "Eval মন্দ" ধন্যবাদ!
ট্যাপট্রনিক

5

অনেকগুলি জটিল এবং অবহেলিত স্ক্রিপ্টগুলিতে এটি পরীক্ষা করেছে:

var js = "alert('Hello, World!');" // put your JS code here
var oScript = document.createElement("script");
var oScriptText = document.createTextNode(js);
oScript.appendChild(oScriptText);
document.body.appendChild(oScript);

5

যদি আপনি একটি নির্দিষ্ট সময়ের পরে একটি নির্দিষ্ট কমান্ড (যা স্ট্রিং হয়) সম্পাদন করতে চান - সেমিডি = আপনার কোড - ইন্টারভাল = দৌড়াতে দেরি

 function ExecStr(cmd, InterVal) {
    try {
        setTimeout(function () {
            var F = new Function(cmd);
            return (F());
        }, InterVal);
    } catch (e) { }
}
//sample
ExecStr("alert(20)",500);

@ স্টিলব্রেন এক্সিকিস্ট্রআর দ্বারা চালিত একটি নমুনা যুক্ত করুন ("সতর্কতা (20)", 500);
হোসেইন হাজীজাদেহ

1
কেন ValInterValমূলধনী?
রেডউলফ প্রোগ্রাম 20'19

4

যে নোড ব্যবহার করছেন এবং eval()নোডেজ অফারের প্রসঙ্গের সাথে জড়িত তাদের ব্যবহারকারীর জন্য vm। এটি একটি ভি 8 ভার্চুয়াল মেশিন তৈরি করে যা একটি পৃথক প্রসঙ্গে আপনার কোডটির সম্পাদন স্যান্ডবক্স করতে পারে।

জিনিসগুলি আরও এক ধাপ এগিয়ে নেওয়া vm2যা ভিএমটিকে vmঅবিশ্বস্ত কোড চালানোর অনুমতি দেয় run

const vm = require('vm');

const x = 1;

const sandbox = { x: 2 };
vm.createContext(sandbox); // Contextify the sandbox.

const code = 'x += 40; var y = 17;';
// `x` and `y` are global variables in the sandboxed environment.
// Initially, x has the value 2 because that is the value of sandbox.x.
vm.runInContext(code, sandbox);

console.log(sandbox.x); // 42
console.log(sandbox.y); // 17

console.log(x); // 1; y is not defined.

2
"এভাল অশুভ" বলা এবং কোনও প্রসঙ্গ বা সমাধান না দেওয়ার পরিবর্তে এটি আসলে সমস্যাটি সমাধান করার চেষ্টা করে। আপনার জন্য +1
রেডওয়ালফ প্রোগ্রাম 20'19

3
eval(s);

তবে আপনি যদি ব্যবহারকারীদের কাছ থেকে ডেটা নিচ্ছেন তবে এটি বিপজ্জনক হতে পারে, যদিও আমি মনে করি তারা যদি তাদের নিজস্ব ব্রাউজারটি ক্র্যাশ করে তবে তাদের সমস্যাটি স্থায়ী।


1
ঠিক। এভাল সার্ভারের পক্ষে বিপজ্জনক। ক্লায়েন্টের উপর ... এতটা নয়। ব্যবহারকারী কেবল জাভাস্ক্রিপ্ট টাইপ করতে পারে: ব্রাউজারের ঠিকানায় কিছুটা কোডিং এবং বুম। ঠিক সেখানে val
এসবেন স্কোভ পেডারসেন

@ এসবেইনস্কভ পিডারসন এটি অন্তত ক্রোমে প্রতিরোধ করেছে এবং ব্যবহারকারীদের evalকোডের বিপরীতে এটির ব্যবহারকারীর পদক্ষেপ প্রয়োজন , যা উদাহরণস্বরূপ ব্যবহারকারীদের কেবল পৃষ্ঠা লোড করে না জেনে অন্য ব্যবহারকারীর অ্যাকাউন্ট চুরি করতে দেয়।
1j01

1
@ 1j01 আমার বক্তব্যটি পাঁচ বছরের পুরানো years
এসবেন স্কোভ পেদারসেন

@ এসবেনস্কভ পিডারসন এটি সত্য: :)
1j01

2

নিশ্চিত নয় যে এটি প্রতারণা করছে কিনা:

window.say = function(a) { alert(a); };

var a = "say('hello')";

var p = /^([^(]*)\('([^']*)'\).*$/;                 // ["say('hello')","say","hello"]

var fn = window[p.exec(a)[1]];                      // get function reference by name

if( typeof(fn) === "function") 
    fn.apply(null, [p.exec(a)[2]]);                 // call it with params


2

আমি অনুরূপ প্রশ্নের উত্তর দিচ্ছিলাম এবং এটি ব্যবহার না করে কীভাবে এটি অর্জন করা যায় তার আরও একটি ধারণা পেয়েছিলাম eval():

const source = "alert('test')";
const el = document.createElement("script");
el.src = URL.createObjectURL(new Blob([source], { type: 'text/javascript' }));
document.head.appendChild(el);

উপরের কোডে আপনি অবজেক্ট ইউআরএল (ব্রাউজারের স্মৃতিতে ফাইল বা ব্লব অবজেক্টের উপস্থাপনা) তৈরি করতে আপনার স্ক্রিপ্ট সমেত ব্লব তৈরি করুন। যেহেতু আপনার ট্যাগে srcসম্পত্তি রয়েছে <script>তাই স্ক্রিপ্টটি একইভাবে কার্যকর করা হবে যেমন এটি অন্য কোনও URL থেকে লোড হয়েছে।


2
function executeScript(source) {
    var script = document.createElement("script");
    script.onload = script.onerror = function(){ this.remove(); };
    script.src = "data:text/plain;base64," + btoa(source);
    document.body.appendChild(script);
}

executeScript("alert('Hello, World!');");


0
eval(s);

তবে মনে রাখবেন যে, এভালটি খুব শক্তিশালী এবং বেশ নিরাপদ। আপনি আরও নিশ্চিত হন যে আপনি যে স্ক্রিপ্টটি সম্পাদন করছেন তা নিরাপদ এবং ব্যবহারকারীগণ দ্বারা নিরবচ্ছিন্ন।


1
জেএসে সমস্ত কিছু ব্যবহারকারী পরিবর্তিত হতে পারে কেবল "জাভাস্ক্রিপ্ট: ডকুমেন্ট.উরাইট (" হ্যালো ওয়ার্ল্ড ") টাইপ করুন;" প্রায় কোনও ব্রাউজারের ঠিকানা বারে
UnkwnTech

1
হ্যাঁ, তবে আপনি গ্লোবাল ভেরিয়েবল ব্যবহার না করে, আপনার ফাংশনগুলি ক্লোজারে আড়াল করে ইত্যাদি ব্যবহার করে তার পক্ষে আরও শক্ত করে তুলতে পারেন, এছাড়াও, প্লেগের মতো
বর্জন

0

কেউ ম্যাথজ ব্যবহার করতে পারেন

উপরের লিঙ্ক থেকে স্নিপেট:

// evaluate expressions
math.evaluate('sqrt(3^2 + 4^2)')        // 5
math.evaluate('sqrt(-4)')               // 2i
math.evaluate('2 inch to cm')           // 5.08 cm
math.evaluate('cos(45 deg)')            // 0.7071067811865476

// provide a scope
let scope = {
    a: 3,
    b: 4
}
math.evaluate('a * b', scope)           // 12
math.evaluate('c = 2.3 + 4.5', scope)   // 6.8
scope.c                                

scopeকোন বস্তু। সুতরাং আপনি যদি বিশ্বব্যাপী সুযোগকে বিলোপকরণ ফাংশনে পাস করেন তবে আপনি সতর্কতা () গতিশীলভাবে কার্যকর করতে সক্ষম হতে পারেন।

এছাড়াও ম্যাথজগুলি ইভাল () এর চেয়ে অনেক ভাল বিকল্প কারণ এটি একটি স্যান্ডবক্সে চলে।

কোনও ব্যবহারকারী এক্সপ্রেশন পার্সারের মাধ্যমে দূষিত জাভাস্ক্রিপ্ট কোডটি ইনজেক্ট করার চেষ্টা করতে পারে। ম্যাথজগুলির এক্সপ্রেশন পার্সার এক্সপ্রেশনগুলি কার্যকর করতে একটি স্যান্ডবক্সযুক্ত পরিবেশ সরবরাহ করে যা এটি অসম্ভব করে তোলে। এটি অজানা সুরক্ষা দুর্বলতা থাকা সত্ত্বেও এটি সম্ভব, সুতরাং সাবধানতা অবলম্বন করা বিশেষত বিশেষত যখন স্বেচ্ছাসেবীর মত প্রকাশের পক্ষ থেকে কার্যকর করা যায়।

ম্যাথজ-এর নতুন সংস্করণগুলি ইভাল () বা ফাংশন () ব্যবহার করে না।

পার্সার সক্রিয়ভাবে জাভাস্ক্রিপ্টগুলির অভ্যন্তরীণ ইভাল এবং নতুন ফাংশনে অ্যাক্সেস রোধ করে যা সুরক্ষা আক্রমণগুলির প্রধান কারণ। ম্যাথজেএস সংস্করণ 4 এবং নতুনতর হুডের নীচে জাভাস্ক্রিপ্টের ইভাল ব্যবহার করে না। সংকলন পদক্ষেপের জন্য সংস্করণ 3 এবং তার বেশি পুরানো ইওল ব্যবহার করেছে। এটি সরাসরি কোনও সুরক্ষা সমস্যা নয় তবে এর ফলে আরও বড় আকারের আক্রমণ পৃষ্ঠের ফলাফল হয়।


0

জাভাস্ক্রিপ্ট সম্পাদন করতে ইওল এবং একটি নতুন ফাংশন তৈরি করা অনেকগুলি নিরাপত্তা ঝুঁকি নিয়ে আসে।

const script = document.createElement("script");
const stringJquery = '$("#button").on("click", function() {console.log("hit")})';
script.text = stringJquery;
document.body.appendChild(script);

আমি স্ট্রিং হিসাবে প্রাপ্ত জাভাস্ক্রিপ্ট কার্যকর করতে এই পদ্ধতিটি পছন্দ করি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.