React vs. XSS: જ્યાં સુરક્ષાના નિયમો (Guardrails) સમાપ્ત થાય છે
React ડિફોલ્ટ રીતે સુરક્ષિત છે. તે મોટાભાગના સ્ક્રિપ્ટ ઇન્જેક્શનને રોકવા માટે JSX માં વેલ્યુઝને escape કરે છે. પરંતુ આ સુરક્ષાનો ખોટો અહેસાસ કરાવી શકે છે. React XSS જોખમને ઘટાડે છે, પરંતુ તેને સંપૂર્ણપણે ખતમ કરતું નથી.
XSS હુમલાના મુખ્ય ત્રણ પ્રકારો છે:
- Reflected XSS: હુમલાખોર એક નુકસાનકારક (malicious) લિંક મોકલે છે. સર્વર તરત જ તે સ્ક્રિપ્ટ યુઝરને પાછી મોકલે છે. બ્રાઉઝર તે સ્ક્રિપ્ટ ચલાવે છે કારણ કે તે કોઈ વિશ્વસનીય સાઇટ પરથી આવી હોય તેવું લાગે છે.
- Stored XSS: હુમલાખોર તમારા સર્વર પર સ્ક્રિપ્ટ સેવ કરે છે. તે તમારા ડેટાબેઝ, કોમેન્ટ્સ અથવા લોગ્સમાં રહે છે. જે પણ યુઝર તે કન્ટેન્ટ જુએ છે, તેના બ્રાઉઝરમાં તે સ્ક્રિપ્ટ રન થાય છે.
- DOM Based XSS: આ હુમલો સંપૂર્ણપણે બ્રાઉઝરમાં થાય છે. હુમલાખોર URL પેરામીટર્સ અથવા ક્લાયન્ટ સાઇડ ઇનપુટ્સમાં ફેરફાર કરીને તમારા JavaScript ને ખોટી રીતે વર્તવા માટે મજબૂર કરે છે.
React ખરેખર તમને શેનાથી બચાવે છે?
- Automatic Escaping: React સ્ટ્રિંગ્સને સાદા ટેક્સ્ટ તરીકે ગણે છે. જો તમે JSX માં સ્ક્રિપ્ટ ટેગ ઇન્જેક્ટ કરવાનો પ્રયાસ કરો છો, તો React કોડ રન કરવાને બદલે ફક્ત ટેક્સ્ટ બતાવે છે.
- Safe Rendering: કન્ટેન્ટ કેવી રીતે દેખાશે તેનું સંચાલન React કરે છે. આનાથી તમારે જોખમી બ્રાઉઝર APIs વાપરવાની જરૂરિયાત ઘટે છે.
- Less DOM Manipulation: React અપડેટ્સ સંભાળે છે. તમારે વારંવાર
document.write()અથવાinnerHTMLવાપરવાની જરૂર પડતી નથી.
React 'escape hatches' પૂરા પાડે છે. જો તમે તેનો ખોટી રીતે ઉપયોગ કરો છો, તો તમે સુરક્ષામાં ખામીઓ (vulnerabilities) ઊભી કરી શકો છો.
આ ભૂલોથી સાવધ રહો:
dangerouslySetInnerHTML: આ પ્રોપર્ટી React ને escaping સ્કીપ કરવા માટે કહે છે. તે HTML ને બરાબર તે જ રીતે ઇન્સર્ટ કરે છે. જો કન્ટેન્ટ ક્લીન ન હોય, તો હુમલાખોર સફળ થઈ શકે છે. તમારા કન્ટેન્ટને સેનિટાઇઝ કરવા માટે પહેલા DOMPurify નો ઉપયોગ કરો.- Direct DOM Manipulation: જો તમે યુઝર ઇનપુટ સાથે
element.innerHTMLનો ઉપયોગ કરો છો, તો તમે React ની તમામ સુરક્ષાને બાયપાસ કરી દો છો. - Third Party Libraries: કેટલાક એક્સટર્નલ ટૂલ્સ કદાચ સમાન સુરક્ષા નિયમોનું પાલન ન કરતા હોય.
React સુરક્ષા માટે સાધનો પૂરા પાડે છે. તમારે તેનો સાચી રીતે ઉપયોગ કરવો જોઈએ. સુરક્ષા એ તમારી જવાબદારી છે.
Source: https://dev.to/ayomidejhay/react-vs-xss-where-the-guardrails-end-6p2