Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
MySQL + SQL · Lesson 143

Login Authentication Query

User को login कराना

Login query username और password को database से जाँचती है। गलत की जाए, तो यह app के सबसे बड़े security छेदों में से एक है। सुरक्षित तरीका दो नियमों पर टिका है: plain passwords कभी store न करें, और user input कभी सीधे SQL में न डालें।

💡 Prepared statement से username द्वारा user fetch कीजिए, फिर password को store किए hash से verify कीजिए।

ख़तरनाक तरीका

-- ऐसा कभी न करें
SELECT * FROM users
WHERE username = '$user' AND password = '$pass';

इसमें दो घातक ख़ामियाँ हैं: password plain text में तुलना होता है (तो इसे unhashed store करना होगा), और user input SQL में paste होता है, SQL injection allow करके। एक बनाया username login पूरी तरह bypass कर सकता है।

Plain passwords कभी store न करें

// जब user register करता है (PHP)
$hash = password_hash($password, PASSWORD_DEFAULT);
// password column में $hash store कीजिए, $password नहीं

मज़बूत one-way hash store कीजिए, असली password नहीं। password_hash bcrypt इस्तेमाल करता है, तो database leak हो भी जाए, attackers passwords नहीं पढ़ सकते।

Prepared statements इस्तेमाल करें

// PHP PDO के साथ
$stmt = $pdo->prepare('SELECT id, password FROM users WHERE username = ?');
$stmt->execute([$username]);
$user = $stmt->fetch();

Prepared statement query और value अलग भेजता है, तो username कभी SQL बदल नहीं सकता। यह SQL injection छेद पूरी तरह बंद करता है। ध्यान दीजिए हम सिर्फ़ username से fetch करते हैं — password से नहीं।

Password verify करना

if ($user && password_verify($password, $user['password'])) {
    // login सफल
} else {
    // invalid username या password
}

password_verify type किए password की store किए hash से तुलना करता है और मेल खाने पर true लौटाता है। Password code में जाँचा जाता है, कभी SQL में नहीं।

पूरा सुरक्षित flow

  1. User username और password submit करता है।
  2. Prepared statement से username द्वारा row fetch कीजिए।
  3. Row मौजूद हो, तो password को उसके hash से password_verify कीजिए।
  4. मेल पर session शुरू कीजिए; वरना सामान्य "invalid login" message दिखाइए।

गलत username और गलत password को वही सामान्य error इस्तेमाल कीजिए, ताकि attackers न बता सकें कौन-सा गलत था।

आम गलतियाँ

  • SQL में passwords तुलना करना। Username से fetch कीजिए, code में verify कीजिए।
  • Plain passwords store करना। हमेशा password_hash से hash कीजिए।
  • User input से SQL बनाना। Prepared statements इस्तेमाल कीजिए।
  • कौन-सा field गलत था बताना। एक सामान्य error message इस्तेमाल कीजिए।

सारांश

  • Plain passwords कभी store न कीजिए — bcrypt hash (password_hash) store कीजिए।
  • User input सीधे SQL में कभी न डालिए — prepared statements इस्तेमाल कीजिए।
  • User को username से fetch कीजिए, password से नहीं।
  • Password को code में password_verify से verify कीजिए।
  • किसी भी failed login को एक सामान्य error दिखाइए।

ध्यान: यह एक संवेदनशील security topic है; हमेशा मौजूदा best practices follow कीजिए। आगे, queries guard कीजिए safe UPDATE और DELETE में, या rows filter कीजिए SELECT और WHERE में।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

MySQL में सुरक्षित login query कैसे लिखूँ?
User input सीधे SQL में कभी न डालिए और plain passwords कभी तुलना न कीजिए। इसके बजाय, prepared statement से username द्वारा user fetch कीजिए, फिर डाला password store किए hash से PHP के password_verify जैसी function से verify कीजिए।
मुझे password SQL query के अंदर क्यों नहीं जाँचना चाहिए?
Password को WHERE clause में डालना मतलब इसे plain text या सरल hash में store करना होगा, और user input से query बनाना SQL injection को न्योता देता है। सुरक्षित pattern username से row fetch करता है, फिर code में मज़बूत hash से password verify करता है।
MySQL में passwords सुरक्षित कैसे store करूँ?
Plain passwords कभी store न कीजिए। PHP के password_hash (bcrypt) जैसी function से बना मज़बूत one-way hash store कीजिए। Login पर आप फिर से hash करके password_verify से तुलना करते हैं। database leak हो भी जाए, असली passwords उजागर नहीं होते।
Prepared statement क्या है और login को क्यों इस्तेमाल करूँ?
Prepared statement SQL और values अलग भेजता है, तो user input कभी query संरचना नहीं बदल सकता। यह SQL injection रोकता है, जहाँ एक बनाया username वरना login bypass या data उजागर कर सकता था।
password_verify कैसे काम करता है?
password_verify user द्वारा type किया password और store किया hash लेता है, और मेल खाने पर true लौटाता है। यह hashing अंदरूनी संभालता है, तो आप कभी raw passwords तुलना नहीं करते या अपना hash-checking logic नहीं लिखते।
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicMultiple Rows Update करें आपकी प्रगति: 143 / 151 (95%) · Lesson 144 / 151 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें