উত্তর:
সঙ্গে eval("my script here")ফাংশন।
আপনি একটি ফাংশন ব্যবহার করে এটি সম্পাদন করতে পারেন। উদাহরণ:
var theInstructions = "alert('Hello World'); var x = 100";
var F=new Function (theInstructions);
return(F());
var F=function(){eval(theInstructions);};?
new Function("alert('Hello World');")()
evalফাংশন একটি স্ট্রিং, যাতে এটি পাস করা হয়েছে মূল্যায়ন করবো।
তবে ব্যবহার evalবিপজ্জনক হতে পারে , তাই সাবধানতার সাথে ব্যবহার করুন।
সম্পাদনা: আননাকাটার একটি ভাল পয়েন্ট রয়েছে - এটি কেবল eval বিপজ্জনক নয় , এটি ধীর । এটি কারণ যাচাই করার কোডটি অবশ্যই স্পটটিতে পার্স করা উচিত, যাতে কিছু কম্পিউটিং সংস্থান লাগবে।
eval()বিপজ্জনক। কোন বিকল্প আছে?
Eval () ব্যবহার করুন।
W3 স্কুল ট্যুর । সাইটের কিছু কার্যকর ব্যবহারযোগ্য উদাহরণ রয়েছে। মোজিলা ডকুমেন্টেশন এটিকে বিস্তারিতভাবে আচ্ছাদন করে।
নিরাপদে এটি ব্যবহার সম্পর্কে আপনি সম্ভবত অনেক সতর্কতা পাবেন । এটি একটি বিশাল সুরক্ষা ইস্যু হওয়ায় ব্যবহারকারীদেরকে কোনও কিছুকেই ইভাল () এ ইনজেক্ট করার অনুমতি দেবেন না ।
আপনি এটিও জানতে চাইবেন যে evভাল () এর আলাদা সুযোগ রয়েছে ।
evalঅনুমানটি আমার কাছে ডাব্লু 3 স্কুলগুলির নিবন্ধের চেয়ে ভাল বর্ণনা করে । ভাল ব্যাখ্যা এবং উদাহরণ সহ পাঠযোগ্য কিছু হ'ল বিকাশকারী.মোজিলা.আর.ইন.ইউএস / ডকস / ওয়েব / জাভা স্ক্রিপ্ট / রেফারেন্স / । এবং না, আমি জর্জিনিঞ্জ নই
এটা চেষ্টা কর:
var script = "<script type='text/javascript'> content </script>";
//using jquery next
$('body').append(script);//incorporates and executes inmediatelly
ব্যক্তিগতভাবে, আমি এটি পরীক্ষা করে দেখিনি তবে কাজ করছে বলে মনে হচ্ছে।
@ হোসেইন হাজীজাদে আলেরেডি যা বলেছিল তার মতো কিছুটা , যদিও আরও বিস্তারিতভাবে:
এর বিকল্পও রয়েছে eval()।
ফাংশনটি setTimeout()মিলিসেকেন্ডের ব্যবধানের পরে কোনও কিছু সম্পাদন করার জন্য ডিজাইন করা হয়েছে এবং কোডটি সম্পাদন করতে হবে ঠিক তাই স্ট্রিং হিসাবে ফর্ম্যাট করা যায়।
এটি এর মতো কাজ করবে:
ExecuteJavascriptString(); //Just for running it
function ExecuteJavascriptString()
{
var s = "alert('hello')";
setTimeout(s, 1);
}
1 মানে স্ট্রিংটি কার্যকর করার আগে এটি 1 মিলিসেকেন্ড অপেক্ষা করবে।
এটি করার সবচেয়ে সঠিক উপায় নাও হতে পারে, তবে এটি কার্যকর হয়।
setTimeout? নোট করুন যে কোনও ক্ষেত্রে এটি কার্যকর করা হবে অ্যাসিক্রোনাস। এর অর্থ হল যে সমস্ত কোড যা setTimeoutকল অনুসরণ করে তা কোড পাস করার আগেইsetTimeout (যদিও 0 (শূন্য) দিয়ে ডাকা হয়) ডাকা হবে।
নীচে হিসাবে eval ব্যবহার করুন । ইভালটি সাবধানতার সাথে ব্যবহার করা উচিত, " অ্যাভাল ইজ ইজ ইজ ਬੁਰ " সম্পর্কিত একটি সাধারণ অনুসন্ধানে কিছু পয়েন্টার নিক্ষেপ করা উচিত।
function ExecuteJavascriptString()
{
var s = "alert('hello')";
eval(s);
}
যদি আপনি একটি নির্দিষ্ট সময়ের পরে একটি নির্দিষ্ট কমান্ড (যা স্ট্রিং হয়) সম্পাদন করতে চান - সেমিডি = আপনার কোড - ইন্টারভাল = দৌড়াতে দেরি
function ExecStr(cmd, InterVal) {
try {
setTimeout(function () {
var F = new Function(cmd);
return (F());
}, InterVal);
} catch (e) { }
}
//sample
ExecStr("alert(20)",500);
Valএ InterValমূলধনী?
যে নোড ব্যবহার করছেন এবং eval()নোডেজ অফারের প্রসঙ্গের সাথে জড়িত তাদের ব্যবহারকারীর জন্য vm। এটি একটি ভি 8 ভার্চুয়াল মেশিন তৈরি করে যা একটি পৃথক প্রসঙ্গে আপনার কোডটির সম্পাদন স্যান্ডবক্স করতে পারে।
জিনিসগুলি আরও এক ধাপ এগিয়ে নেওয়া vm2যা ভিএমটিকে vmঅবিশ্বস্ত কোড চালানোর অনুমতি দেয় run
https://nodejs.org/api/vm.html - অফিসিয়াল নোডেজ / ভিএম
https://github.com/patriksimek/vm2 - বর্ধিত ভিএম 2
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.
eval(s);
তবে আপনি যদি ব্যবহারকারীদের কাছ থেকে ডেটা নিচ্ছেন তবে এটি বিপজ্জনক হতে পারে, যদিও আমি মনে করি তারা যদি তাদের নিজস্ব ব্রাউজারটি ক্র্যাশ করে তবে তাদের সমস্যাটি স্থায়ী।
evalকোডের বিপরীতে এটির ব্যবহারকারীর পদক্ষেপ প্রয়োজন , যা উদাহরণস্বরূপ ব্যবহারকারীদের কেবল পৃষ্ঠা লোড করে না জেনে অন্য ব্যবহারকারীর অ্যাকাউন্ট চুরি করতে দেয়।
নিশ্চিত নয় যে এটি প্রতারণা করছে কিনা:
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
নতুন ফাংশন এবং প্রয়োগ () একসাথে কাজ করে
var a=new Function('alert(1);')
a.apply(null)
eval()। বিকাশকারী.মোজিলা.আর.ইন-
আমি অনুরূপ প্রশ্নের উত্তর দিচ্ছিলাম এবং এটি ব্যবহার না করে কীভাবে এটি অর্জন করা যায় তার আরও একটি ধারণা পেয়েছিলাম 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 থেকে লোড হয়েছে।
eval এটি করা উচিত।
eval(s);
eval(s);
তবে মনে রাখবেন যে, এভালটি খুব শক্তিশালী এবং বেশ নিরাপদ। আপনি আরও নিশ্চিত হন যে আপনি যে স্ক্রিপ্টটি সম্পাদন করছেন তা নিরাপদ এবং ব্যবহারকারীগণ দ্বারা নিরবচ্ছিন্ন।
কেউ ম্যাথজ ব্যবহার করতে পারেন
উপরের লিঙ্ক থেকে স্নিপেট:
// 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 এবং তার বেশি পুরানো ইওল ব্যবহার করেছে। এটি সরাসরি কোনও সুরক্ষা সমস্যা নয় তবে এর ফলে আরও বড় আকারের আক্রমণ পৃষ্ঠের ফলাফল হয়।
জাভাস্ক্রিপ্ট সম্পাদন করতে ইওল এবং একটি নতুন ফাংশন তৈরি করা অনেকগুলি নিরাপত্তা ঝুঁকি নিয়ে আসে।
const script = document.createElement("script");
const stringJquery = '$("#button").on("click", function() {console.log("hit")})';
script.text = stringJquery;
document.body.appendChild(script);
আমি স্ট্রিং হিসাবে প্রাপ্ত জাভাস্ক্রিপ্ট কার্যকর করতে এই পদ্ধতিটি পছন্দ করি।