Theory
તમારી website બે computers ચલાવે છે
જ્યારે કોઈ student FestConnect પર નોંધણી કરે છે, ત્યારે બે સાવ જુદાં યંત્રો સંડોવાયેલાં હોય છે. એનો phone (client) form દેખાડે છે અને એ લખે તેમ પ્રતિભાવ આપે છે. College નું server ખરેખર નોંધણી સંઘરે છે અને બેઠકોની સંખ્યા સામે એને તપાસે છે.
Code બંનેમાંથી કોઈ પણ જગ્યાએ ચાલી શકે છે, અને કઈ જગ્યાએ ચાલે છે એ મહત્ત્વનું છે. Browser નું script એ લખે એ જ ક્ષણે 'email ખોટું લાગે છે' ચમકાવી શકે છે. Server નું script નોંધ સંઘરીને ticket ને email કરી શકે છે. એકેય બીજાનું કામ સારી રીતે કરી શકતું નથી.
Theory
વેઇટર અને રસોડું
Restaurant માં, વેઇટર (client-side) ત્યાં જ હાજર છે: તમારો order લે છે, દેખીતી ભૂલો સુધારે છે ('એ અમારી પાસે નથી'), તરત જવાબ આપે છે. રસોડું (server-side) નજરથી દૂર છે: એ સામગ્રી રાખે છે, ગુપ્ત રીતો અનુસરે છે, અને ખરેખર ખાવાનું બનાવે છે. તમે ગ્રાહકને રસોડામાં ન જવા દો, અને વેઇટર રાંધી શકતો નથી. Website કામ એ જ રીતે વહેંચે છે.
Theory
Client-side સામે server-side
- Client-side scripting એ browser માં ચાલે છે. ભાષા છે JavaScript. એ clicks અને keys ને પ્રતિભાવ આપે છે, પાનું ફરી load કર્યા વગર એને સુધારે છે, અને તરત validate કરે છે. વાપરનાર એને જોઈ શકે છે (View Source) અને બંધ પણ કરી શકે છે.
- Server-side scripting એ પાનું મોકલાય એ પહેલાં web server પર ચાલે છે. ભાષાઓમાં PHP, Python, Node આવે છે. એ database વાંચે અને લખે છે, passwords તપાસે છે, ગુપ્ત વસ્તુઓ રાખે છે, અને HTML બનાવે છે. વાપરનાર આ code ક્યારેય જોતો નથી.
ખરેખરી sites બંને વાપરે છે.
At a glance
કામ ક્યાં થાય છે
| પાસું | Client-side (JS) | Server-side (PHP/Python) |
|---|---|---|
| ક્યાં ચાલે છે | browser માં | web server પર |
| શેમાં હોશિયાર | તરતનું UI, પ્રતિભાવો | database, ગુપ્ત વસ્તુઓ, auth |
| વાપરનારને દેખાય? | હા (View Source) | ના |
| ફરી load કરવું પડે? | ના | સામાન્ય રીતે નવું પાનું પાછું આપે છે |
Think first
બેઠકો કોણ તપાસે?
FestConnect દેખાડે છે 'બાકી બેઠકો: 3'. ચોથી વ્યક્તિને નોંધણી કરતાં અટકાવતી ચકાસણી browser (JS) માં થવી જોઈએ કે server પર, અને એ ફક્ત browser પર કેમ ભરોસો ન કરી શકાય?
Show the answer
Server પર. 'બાકી બેઠકો' ની browser વાળી નકલ વાસી હોઈ શકે છે (કોઈ બીજાએ હમણાં જ નોંધણી કરી) અને વાપરનાર JavaScript ને બદલી કે બંધ કરી શકે છે. ફક્ત server જ ખરેખરો, હાલનો database જુએ છે અને ચોથી નોંધણીને ભરોસાપાત્ર રીતે નકારી શકે છે. Browser સારા અનુભવ માટે ઇશારો કરી શકે ('ભરેલું લાગે છે'), પણ સત્ય server પાસે છે. આ સોનેરી નિયમ છે: જે સાચું જ હોવું જોઈએ એના માટે client પર ક્યારેય ભરોસો ન કરો.
Quiz
તમારું FestConnect નું form submit કરતાં પહેલાં ખાલી ખાનાં નકારવા JavaScript વાપરે છે. શું ખરાબ data ને database થી દૂર રાખવા એટલું પૂરતું છે?
- ના: server એ ફરી validate કરવું જ પડે, કારણ કે વાપરનારા client-side JS ને બાજુ પર મૂકી શકે છે
- હા: client-side validation database ને પૂરેપૂરું સલામત કરે છે
- હા, જ્યાં સુધી તમે વધુ JavaScript ની ચકાસણીઓ પણ ઉમેરો
- ના: JavaScript forms ને validate કરી જ શકતું નથી
Show the answer
ના: server એ ફરી validate કરવું જ પડે, કારણ કે વાપરનારા client-side JS ને બાજુ પર મૂકી શકે છે
Client-side JS નું validation ઝડપી, મૈત્રીપૂર્ણ અનુભવ માટે છે, પણ વાપરનાર JS બંધ કરી શકે છે કે સીધી request મોકલી શકે છે, જે એને સાવ બાજુ પર મૂકી દે છે, એટલે સંઘરતાં પહેલાં server એ ફરી તપાસવું જ પડે (A). વધુ JS (C) એવી ચકાસણીને સુધારતું નથી જેને બંધ કરી શકાય. JS ચોક્કસ validate કરી શકે છે (D ખોટું છે); એ ફક્ત બચાવની છેલ્લી હરોળ નથી. નિયમ: UX માટે client પર validate કરો, સલામતી માટે server પર ફરી validate કરો.
Watch out
ભરોસાનો ફાંદો
સૌથી મોટી ગેરસમજ: 'મારું JavaScript તપાસે છે, એટલે એ સલામત છે'. Browser માંનું બધું જ વાપરનારને દેખાય છે અને એ બદલી શકે છે. Passwords, ભાવ, બેઠકોની મર્યાદા, પરવાનગીઓ, બધું server પર જ અમલમાં મુકાવું જોઈએ. Client-side scripting પાનું કેવું લાગે છે એ સુધારે છે; server-side scripting નક્કી કરે છે કે સાચું શું છે.
Theory
તમે server ની બાજુને પહેલેથી મળી ચૂક્યા છો
BCA303 (Python વત્તા SQLite) નું database નું કામ અને BCA105 નું SQL એ server-side હતું: browser થી દૂર, data ની બાજુમાં ચાલતો code. આખું આ Unit 3 એ બીજો અડધો ભાગ છે, client ની બાજુ, JavaScript માં. અંતે, FestConnect નું form browser માં validate થશે (આ એકમ) અને તમને બરાબર સમજાશે કે ખરેખરું સંઘરવાનું હજી server ને જ કેમ સોંપાય છે.
Summary
Key takeaways
- Client-side scripting (JavaScript) browser માં ચાલે છે: તરતના પ્રતિભાવ, UI માં ફેરફાર, ફરી load નહીં; વાપરનારને દેખાય અને એ બંધ કરી શકે.
- Server-side scripting (PHP, Python, Node) server પર ચાલે છે: database, ગુપ્ત વસ્તુઓ, authentication; વાપરનારથી છુપાયેલું.
- ખરેખરી sites બંને વાપરે છે: ચપળ અનુભવ માટે JS, સત્ય અને સંગ્રહ માટે server.
- Client-side validation ફક્ત સગવડ છે; સલામતી માટે server એ ફરી validate કરવું જ પડે.
- જે સાચું જ હોવું જોઈએ (બેઠકો, ભાવ, passwords) એના માટે client પર ક્યારેય ભરોસો ન કરો.
- Memory hook: વેઇટર (client) અને રસોડું (server).