MySQL sql ਇੰਜੈਕਸ਼ਨ ਨੂੰ ਕਿਵੇਂ ਰੋਕਦਾ ਹੈ? SQL ਇੰਜੈਕਸ਼ਨ ਸਿਧਾਂਤ ਅਤੇ ਰੋਕਥਾਮ

MySQLsql ਇੰਜੈਕਸ਼ਨ ਨੂੰ ਕਿਵੇਂ ਰੋਕਿਆ ਜਾਵੇ? SQL ਇੰਜੈਕਸ਼ਨ ਸਿਧਾਂਤ ਅਤੇ ਰੋਕਥਾਮ

MySQL ਅਤੇ SQL ਟੀਕਾ

ਜੇਕਰ ਤੁਸੀਂ ਇੱਕ ਵੈਬ ਪੇਜ ਦੁਆਰਾ ਉਪਭੋਗਤਾ ਦੁਆਰਾ ਦਾਖਲ ਕੀਤੇ ਡੇਟਾ ਨੂੰ ਲੈਂਦੇ ਹੋ ਅਤੇ ਇਸਨੂੰ ਇੱਕ ਵਿੱਚ ਸੰਮਿਲਿਤ ਕਰਦੇ ਹੋMySQL ਡਾਟਾਬੇਸ, ਫਿਰ SQL ਇੰਜੈਕਸ਼ਨ ਸੁਰੱਖਿਆ ਸਮੱਸਿਆਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ।

ਇਹ ਅਧਿਆਇ ਤੁਹਾਨੂੰ SQL ਇੰਜੈਕਸ਼ਨ ਨੂੰ ਰੋਕਣ ਅਤੇ SQL ਵਿੱਚ ਇੰਜੈਕਟ ਕੀਤੇ ਅੱਖਰਾਂ ਨੂੰ ਫਿਲਟਰ ਕਰਨ ਲਈ ਸਕ੍ਰਿਪਟਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨ ਬਾਰੇ ਜਾਣੂ ਕਰਵਾਏਗਾ।

ਅਖੌਤੀ SQL ਇੰਜੈਕਸ਼ਨ ਡੋਮੇਨ ਨਾਮ ਜਾਂ ਪੇਜ ਬੇਨਤੀ ਦੀ ਪੁੱਛਗਿੱਛ ਸਤਰ ਨੂੰ ਦਰਜ ਕਰਨ ਜਾਂ ਇਨਪੁਟ ਕਰਨ ਲਈ ਵੈੱਬ ਫਾਰਮ ਵਿੱਚ SQL ਕਮਾਂਡਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰਕੇ ਖਤਰਨਾਕ SQL ਕਮਾਂਡਾਂ ਨੂੰ ਚਲਾਉਣ ਲਈ ਸਰਵਰ ਨੂੰ ਧੋਖਾ ਦੇਣਾ ਹੈ।

ਸਾਨੂੰ ਕਦੇ ਵੀ ਉਪਭੋਗਤਾ ਇੰਪੁੱਟ 'ਤੇ ਭਰੋਸਾ ਨਹੀਂ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ, ਸਾਨੂੰ ਇਹ ਮੰਨਣਾ ਚਾਹੀਦਾ ਹੈ ਕਿ ਉਪਭੋਗਤਾ ਇਨਪੁਟ ਡੇਟਾ ਅਸੁਰੱਖਿਅਤ ਹੈ, ਅਤੇ ਸਾਨੂੰ ਸਾਰਿਆਂ ਨੂੰ ਉਪਭੋਗਤਾ ਇਨਪੁਟ ਡੇਟਾ ਨੂੰ ਫਿਲਟਰ ਕਰਨ ਦੀ ਜ਼ਰੂਰਤ ਹੈ.

ਨਿਮਨਲਿਖਤ ਉਦਾਹਰਨ ਵਿੱਚ, ਦਾਖਲ ਕੀਤਾ ਉਪਭੋਗਤਾ ਨਾਮ ਅੱਖਰਾਂ, ਸੰਖਿਆਵਾਂ ਅਤੇ ਅੰਡਰਸਕੋਰਾਂ ਦਾ ਸੁਮੇਲ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ, ਅਤੇ ਉਪਭੋਗਤਾ ਨਾਮ 8 ਅਤੇ 20 ਅੱਖਰਾਂ ਦੇ ਵਿਚਕਾਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysqli_query($conn, "SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

ਆਓ SQL ਸਥਿਤੀ 'ਤੇ ਇੱਕ ਨਜ਼ਰ ਮਾਰੀਏ ਜੋ ਉਦੋਂ ਵਾਪਰਦੀ ਹੈ ਜਦੋਂ ਕੋਈ ਵਿਸ਼ੇਸ਼ ਅੱਖਰ ਫਿਲਟਰ ਨਹੀਂ ਕੀਤੇ ਜਾਂਦੇ ਹਨ:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

ਉਪਰੋਕਤ ਇੰਜੈਕਸ਼ਨ ਸਟੇਟਮੈਂਟ ਵਿੱਚ, ਅਸੀਂ $name ਦੇ ਵੇਰੀਏਬਲ ਨੂੰ ਫਿਲਟਰ ਨਹੀਂ ਕੀਤਾ ਹੈ। SQL ਸਟੇਟਮੈਂਟ ਜਿਸ ਦੀ ਸਾਨੂੰ ਲੋੜ ਨਹੀਂ ਹੈ, $name ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ ਹੈ, ਜੋ ਉਪਭੋਗਤਾ ਸਾਰਣੀ ਵਿੱਚ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾ ਦੇਵੇਗਾ।

PHP ਵਿੱਚ mysqli_query() ਨੂੰ ਕਈ SQL ਸਟੇਟਮੈਂਟਾਂ ਨੂੰ ਚਲਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ, ਪਰ SQLite ਅਤੇ PostgreSQL ਇੱਕੋ ਸਮੇਂ ਇੱਕ ਤੋਂ ਵੱਧ SQL ਸਟੇਟਮੈਂਟਾਂ ਨੂੰ ਐਗਜ਼ੀਕਿਊਟ ਕਰ ਸਕਦੇ ਹਨ, ਇਸ ਲਈ ਸਾਨੂੰ ਇਹਨਾਂ ਉਪਭੋਗਤਾਵਾਂ ਦੇ ਡੇਟਾ ਦੀ ਸਖਤੀ ਨਾਲ ਪੁਸ਼ਟੀ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।

SQL ਇੰਜੈਕਸ਼ਨ ਨੂੰ ਰੋਕਣ ਲਈ, ਸਾਨੂੰ ਹੇਠਾਂ ਦਿੱਤੇ ਨੁਕਤਿਆਂ ਵੱਲ ਧਿਆਨ ਦੇਣ ਦੀ ਲੋੜ ਹੈ:

  • 1. ਯੂਜ਼ਰ ਇਨਪੁਟ 'ਤੇ ਕਦੇ ਭਰੋਸਾ ਨਾ ਕਰੋ।ਉਪਭੋਗਤਾ ਦੇ ਇੰਪੁੱਟ ਦੀ ਜਾਂਚ ਕਰੋ, ਤੁਸੀਂ ਨਿਯਮਤ ਸਮੀਕਰਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ, ਜਾਂ ਲੰਬਾਈ ਨੂੰ ਸੀਮਿਤ ਕਰ ਸਕਦੇ ਹੋ; ਸਿੰਗਲ ਕੋਟਸ ਅਤੇ ਡਬਲ "-", ਆਦਿ ਨੂੰ ਬਦਲ ਸਕਦੇ ਹੋ।
  • 2. ਕਦੇ ਵੀ ਡਾਇਨਾਮਿਕ ਅਸੈਂਬਲੀ sql ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ, ਤੁਸੀਂ ਪੈਰਾਮੀਟਰਾਈਜ਼ਡ sql ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਡੇਟਾ ਪੁੱਛਗਿੱਛ ਅਤੇ ਪਹੁੰਚ ਲਈ ਸਟੋਰ ਕੀਤੀਆਂ ਪ੍ਰਕਿਰਿਆਵਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ।
  • 3. ਕਦੇ ਵੀ ਪ੍ਰਸ਼ਾਸਕ ਦੇ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰਾਂ ਨਾਲ ਡੇਟਾਬੇਸ ਕਨੈਕਸ਼ਨਾਂ ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ, ਹਰੇਕ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਸੀਮਤ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰਾਂ ਵਾਲੇ ਵੱਖਰੇ ਡੇਟਾਬੇਸ ਕਨੈਕਸ਼ਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ।
  • 4. ਗੁਪਤ ਜਾਣਕਾਰੀ ਨੂੰ ਸਿੱਧਾ ਸਟੋਰ ਨਾ ਕਰੋ, ਪਾਸਵਰਡ ਅਤੇ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਨੂੰ ਐਨਕ੍ਰਿਪਟ ਜਾਂ ਹੈਸ਼ ਆਊਟ ਨਾ ਕਰੋ।
  • 5. ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਅਪਵਾਦ ਜਾਣਕਾਰੀ ਨੂੰ ਜਿੰਨਾ ਸੰਭਵ ਹੋ ਸਕੇ ਕੁਝ ਸੰਕੇਤ ਦੇਣੇ ਚਾਹੀਦੇ ਹਨ, ਅਤੇ ਅਸਲ ਗਲਤੀ ਜਾਣਕਾਰੀ ਨੂੰ ਸਮੇਟਣ ਲਈ ਕਸਟਮ ਗਲਤੀ ਜਾਣਕਾਰੀ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਸਭ ਤੋਂ ਵਧੀਆ ਹੈ
  • 6. sql ਇੰਜੈਕਸ਼ਨ ਦੀ ਖੋਜ ਵਿਧੀ ਆਮ ਤੌਰ 'ਤੇ ਸਹਾਇਕ ਨੂੰ ਅਪਣਾਉਂਦੀ ਹੈਸਾਫਟਵੇਅਰਜਾਂ ਖੋਜਣ ਲਈ ਵੈੱਬਸਾਈਟ ਪਲੇਟਫਾਰਮ, ਸੌਫਟਵੇਅਰ ਆਮ ਤੌਰ 'ਤੇ sql ਇੰਜੈਕਸ਼ਨ ਖੋਜ ਟੂਲ jsky ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਵੈੱਬਸਾਈਟ ਪਲੇਟਫਾਰਮ ਵਿੱਚ Yisi ਵੈੱਬਸਾਈਟ ਸੁਰੱਖਿਆ ਪਲੇਟਫਾਰਮ ਖੋਜ ਟੂਲ ਹੈ। MDCSOFT SCAN et al.MDCSOFT-IPS ਦੀ ਵਰਤੋਂ ਕਰਨਾ SQL ਇੰਜੈਕਸ਼ਨ, XSS ਹਮਲਿਆਂ, ਆਦਿ ਤੋਂ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਬਚਾਅ ਕਰ ਸਕਦਾ ਹੈ।

SQL ਇੰਜੈਕਸ਼ਨ ਨੂੰ ਰੋਕੋ

ਸਕ੍ਰਿਪਟਿੰਗ ਭਾਸ਼ਾਵਾਂ ਜਿਵੇਂ ਕਿ ਪਰਲ ਅਤੇ PHP ਵਿੱਚ ਤੁਸੀਂ SQL ਇੰਜੈਕਸ਼ਨ ਨੂੰ ਰੋਕਣ ਲਈ ਉਪਭੋਗਤਾ ਦੁਆਰਾ ਦਾਖਲ ਕੀਤੇ ਡੇਟਾ ਤੋਂ ਬਚ ਸਕਦੇ ਹੋ।

PHP ਲਈ MySQL ਐਕਸਟੈਂਸ਼ਨ ਖਾਸ ਇਨਪੁਟ ਅੱਖਰਾਂ ਤੋਂ ਬਚਣ ਲਈ mysqli_real_escape_string() ਫੰਕਸ਼ਨ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ।

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

ਲਾਈਕ ਸਟੇਟਮੈਂਟਾਂ ਵਿੱਚ ਇੰਜੈਕਸ਼ਨ

ਪੁੱਛਗਿੱਛ ਕਰਦੇ ਸਮੇਂ, ਜੇਕਰ ਉਪਭੋਗਤਾ "_" ਅਤੇ "%" ਨਾਲ ਮੁੱਲ ਦਾਖਲ ਕਰਦਾ ਹੈ, ਤਾਂ ਅਜਿਹਾ ਹੋਵੇਗਾ: ਉਪਭੋਗਤਾ ਅਸਲ ਵਿੱਚ "abcd_" ਦੀ ਪੁੱਛਗਿੱਛ ਕਰਨਾ ਚਾਹੁੰਦਾ ਸੀ, ਪਰ ਪੁੱਛਗਿੱਛ ਦੇ ਨਤੀਜਿਆਂ ਵਿੱਚ "abcd_", "abcde", ਅਤੇ "abcdf" ਸ਼ਾਮਲ ਹਨ " ਆਦਿ; ਸਮੱਸਿਆ ਉਦੋਂ ਵੀ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਉਪਭੋਗਤਾ "30%" (ਨੋਟ: ਤੀਹ ਪ੍ਰਤੀਸ਼ਤ) ਪੁੱਛਣਾ ਚਾਹੁੰਦਾ ਹੈ।

ਇੱਕ PHP ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਅਸੀਂ ਉਪਰੋਕਤ ਸਥਿਤੀ ਨੂੰ ਸੰਭਾਲਣ ਲਈ addcslashes() ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹਾਂ, ਜਿਵੇਂ ਕਿ ਹੇਠਾਂ ਦਿੱਤੀ ਉਦਾਹਰਣ ਵਿੱਚ:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");
// $sub == \%something\_
 mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes() ਫੰਕਸ਼ਨ ਨਿਰਧਾਰਤ ਅੱਖਰ ਤੋਂ ਪਹਿਲਾਂ ਇੱਕ ਬੈਕਸਲੈਸ਼ ਜੋੜਦਾ ਹੈ।

ਸੰਟੈਕਸ ਫਾਰਮੈਟ:

addcslashes(string,characters)
ਪੈਰਾਮੀਟਰਵੇਰਵਾ
ਸਤਰਲੋੜੀਂਦਾ ਹੈ।ਜਾਂਚ ਕਰਨ ਲਈ ਸਤਰ ਨਿਸ਼ਚਿਤ ਕਰਦਾ ਹੈ।
ਅੱਖਰਵਿਕਲਪਿਕ।addcslashes() ਦੁਆਰਾ ਪ੍ਰਭਾਵਿਤ ਅੱਖਰਾਂ ਦੇ ਅੱਖਰ ਜਾਂ ਰੇਂਜ ਨੂੰ ਨਿਸ਼ਚਿਤ ਕਰਦਾ ਹੈ।

ਹੋਪ ਚੇਨ ਵੇਇਲਿਯਾਂਗ ਬਲੌਗ ( https://www.chenweiliang.com/ ) ਨੇ ਸਾਂਝਾ ਕੀਤਾ "MySQL sql ਇੰਜੈਕਸ਼ਨ ਨੂੰ ਕਿਵੇਂ ਰੋਕਦਾ ਹੈ? sql ਇੰਜੈਕਸ਼ਨ ਸਿਧਾਂਤ ਅਤੇ ਰੋਕਥਾਮ", ਇਹ ਤੁਹਾਡੀ ਮਦਦ ਕਰੇਗਾ।

ਇਸ ਲੇਖ ਦਾ ਲਿੰਕ ਸਾਂਝਾ ਕਰਨ ਲਈ ਸੁਆਗਤ ਹੈ:https://www.chenweiliang.com/cwl-500.html

ਨਵੀਨਤਮ ਅਪਡੇਟਸ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਚੇਨ ਵੇਇਲਿਯਾਂਗ ਦੇ ਬਲੌਗ ਦੇ ਟੈਲੀਗ੍ਰਾਮ ਚੈਨਲ ਵਿੱਚ ਸੁਆਗਤ ਹੈ!

🔔 ਚੈਨਲ ਦੀ ਚੋਟੀ ਦੀ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਕੀਮਤੀ "ChatGPT ਸਮੱਗਰੀ ਮਾਰਕੀਟਿੰਗ AI ਟੂਲ ਵਰਤੋਂ ਗਾਈਡ" ਪ੍ਰਾਪਤ ਕਰਨ ਵਾਲੇ ਪਹਿਲੇ ਬਣੋ! 🌟
📚 ਇਸ ਗਾਈਡ ਵਿੱਚ ਬਹੁਤ ਵੱਡਾ ਮੁੱਲ ਹੈ, 🌟ਇਹ ਇੱਕ ਦੁਰਲੱਭ ਮੌਕਾ ਹੈ, ਇਸ ਨੂੰ ਨਾ ਗੁਆਓ! ⏰⌛💨
ਜੇ ਚੰਗਾ ਲੱਗੇ ਤਾਂ ਸ਼ੇਅਰ ਅਤੇ ਲਾਈਕ ਕਰੋ!
ਤੁਹਾਡੀ ਸ਼ੇਅਰਿੰਗ ਅਤੇ ਪਸੰਦ ਸਾਡੀ ਨਿਰੰਤਰ ਪ੍ਰੇਰਣਾ ਹਨ!

 

ਇੱਕ ਟਿੱਪਣੀ ਪੋਸਟ

ਤੁਹਾਡਾ ਈਮੇਲ ਪਤਾ ਪ੍ਰਕਾਸ਼ਤ ਨਹੀ ਕੀਤਾ ਜਾਵੇਗਾ. ਲੋੜੀਂਦੇ ਖੇਤਰ ਵਰਤੇ ਜਾ ਰਹੇ ਹਨ * ਲੇਬਲ

ਸਿਖਰ ਤੱਕ ਸਕ੍ਰੋਲ ਕਰੋ