আমি এটি প্রতিক্রিয়া টিউটোরিয়ালে পড়েছি। এটার মানে কি?
প্রতিক্রিয়া নিরাপদ। আমরা এইচটিএমএল স্ট্রিং তৈরি করছি না তাই এক্সএসএস সুরক্ষা ডিফল্ট।
প্রতিক্রিয়া নিরাপদ হলে এক্সএসএস আক্রমণগুলি কীভাবে কাজ করবে? এই সুরক্ষা কীভাবে অর্জিত হয়?
আমি এটি প্রতিক্রিয়া টিউটোরিয়ালে পড়েছি। এটার মানে কি?
প্রতিক্রিয়া নিরাপদ। আমরা এইচটিএমএল স্ট্রিং তৈরি করছি না তাই এক্সএসএস সুরক্ষা ডিফল্ট।
প্রতিক্রিয়া নিরাপদ হলে এক্সএসএস আক্রমণগুলি কীভাবে কাজ করবে? এই সুরক্ষা কীভাবে অর্জিত হয়?
উত্তর:
ReactJS ডিজাইন দ্বারা বেশ নিরাপদ
সুতরাং এর মতো একটি সাধারণ আক্রমণ কার্যকর হবে না
const username = "<img onerror='alert(\"Hacked!\")' src='invalid-image' />";
class UserProfilePage extends React.Component {
render() {
return (
<h1> Hello {username}!</h1>
);
}
}
ReactDOM.render(<UserProfilePage />, document.querySelector("#app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
কিন্তু ...
dangerouslySetInnerHTML
আপনি যখন ব্যবহার করবেন তখন আপনাকে dangerouslySetInnerHTML
নিশ্চিত করতে হবে যে সামগ্রীটিতে কোনও জাভাস্ক্রিপ্ট নেই। প্রতিক্রিয়া আপনার জন্য এখানে কিছু করতে পারে না।
const aboutUserText = "<img onerror='alert(\"Hacked!\");' src='invalid-image' />";
class AboutUserComponent extends React.Component {
render() {
return (
<div dangerouslySetInnerHTML={{"__html": aboutUserText}} />
);
}
}
ReactDOM.render(<AboutUserComponent />, document.querySelector("#app"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
উদাহরণ 1: জাভাস্ক্রিপ্ট ব্যবহার করে: কোড
ফলাফলটি দেখতে "কোড কোড স্নিপেট" -> "আমার ওয়েবসাইট" এ ক্লিক করুন
const userWebsite = "javascript:alert('Hacked!');";
class UserProfilePage extends React.Component {
render() {
return (
<a href={userWebsite}>My Website</a>
)
}
}
ReactDOM.render(<UserProfilePage />, document.querySelector("#app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
উদাহরণ 2: বেস 64 এনকোডড ডেটা ব্যবহার করে:
ফলাফলটি দেখতে "কোড কোড স্নিপেট" -> "আমার ওয়েবসাইট" এ ক্লিক করুন
const userWebsite = "data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGFja2VkISIpOzwvc2NyaXB0Pg==";
class UserProfilePage extends React.Component {
render() {
const url = userWebsite.replace(/^(javascript\:)/, "");
return (
<a href={url}>My Website</a>
)
}
}
ReactDOM.render(<UserProfilePage />, document.querySelector("#app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
const customPropsControledByAttacker = {
dangerouslySetInnerHTML: {
"__html": "<img onerror='alert(\"Hacked!\");' src='invalid-image' />"
}
};
class Divider extends React.Component {
render() {
return (
<div {...customPropsControledByAttacker} />
);
}
}
ReactDOM.render(<Divider />, document.querySelector("#app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
এখানে আরও সংস্থান আছে
প্রতিক্রিয়া স্বয়ংক্রিয়ভাবে আপনার জন্য ভেরিয়েবলগুলি পলায়ন করে ... এটি ক্ষতিকারক জাভাস্ক্রিপ্ট সহ স্ট্রিং এইচটিএমএল এর মাধ্যমে এক্সএসএস ইনজেকশনটিকে রোধ করে .. স্বাভাবিকভাবেই, ইনপুটগুলিও এর সাথে স্যানিটাইজ করা হয়।
উদাহরণস্বরূপ বলা যাক আপনার কাছে এই স্ট্রিং রয়েছে
var htmlString = '<img src="javascript:alert('XSS!')" />';
যদি আপনি প্রতিক্রিয়াতে এই স্ট্রিংটি রেন্ডার করার চেষ্টা করেন
render() {
return (
<div>{htmlString}</div>
);
}
আপনি আক্ষরিকভাবে পৃষ্ঠাটিতে পুরো স্ট্রিংটি দেখতে পাবেন including <span>
tag ব্রাউজারে আপনি দেখতে পাবেন<img src="javascript:alert('XSS!')" />
যদি আপনি উত্সটি এইচটিএমএল দেখেন তবে আপনি দেখতে পাবেন
<span>"<img src="javascript:alert('XSS!')" />"</span>
এক্সএসএসের আক্রমণ কী তা সম্পর্কে এখানে আরও কিছু বিশদ
প্রতিক্রিয়াটি মূলত এটি করে তোলে যাতে আপনি রেন্ডার ফাংশনে নিজেকে উপাদান তৈরি না করা পর্যন্ত আপনি মার্কআপ সন্নিবেশ করতে পারবেন না ... বলা হচ্ছে যে তাদের একটি ফাংশন রয়েছে যা এটি এর রেন্ডারিংকে অনুমতি দেয় dangerouslySetInnerHTML
... এটি সম্পর্কে আরও বিশদ এখানে
কয়েকটি বিষয় লক্ষণীয়, প্রতিক্রিয়া কী থেকে বাঁচতে পারে তার চারপাশে যাওয়ার উপায় রয়েছে। আর একটি সাধারণ উপায় হ'ল যখন ব্যবহারকারীরা আপনার উপাদানগুলিতে প্রপস সংজ্ঞা দেয়। প্রপস হিসাবে ব্যবহারকারীর ইনপুট থেকে কোনও ডেটা প্রসারিত করবেন না!