ווי קען MySQL פאַרמייַדן sql ינדזשעקשאַן? סקל ינדזשעקשאַן פּרינציפּ און פאַרהיטונג

מיסקלווי צו פאַרמייַדן sql ינדזשעקשאַן? סקל ינדזשעקשאַן פּרינציפּ און פאַרהיטונג

מיסקל און סקל ינדזשעקשאַן

אויב איר נעמען די דאַטן אריין דורך די באַניצער דורך אַ וועב בלאַט און אַרייַנלייגן עס אין אַMySQL דאַטאַבייס, דעמאָלט עס קען זיין סקל ינדזשעקשאַן זיכערהייט פּראָבלעמס.

דער קאַפּיטל וועט באַקענען איר ווי צו פאַרמייַדן 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}'");

אין די אויבן ינדזשעקשאַן ויסזאָגונג, מיר האָבן נישט פילטער די בייַטעוודיק פון $ נאָמען, און די SQL ויסזאָגונג וואָס מיר טאָן ניט דאַרפֿן איז ינסערטאַד אין $ נאָמען, וואָס וועט ויסמעקן אַלע די דאַטן אין די יוזערז טיש.

mysqli_query () אין PHP איז נישט ערלויבט צו ויספירן קייפל סקל סטייטמאַנץ, אָבער אין SQLite און PostgreSQL, קייפל סקל סטייטמאַנץ קענען זיין עקסאַקיוטאַד אין דער זעלביקער צייט, אַזוי מיר דאַרפֿן צו שטרענג באַשטעטיקן די דאַטן פון די יוזערז.

צו פאַרמייַדן SQL ינדזשעקשאַן, מיר דאַרפֿן צו באַצאָלן ופמערקזאַמקייט צו די פאלגענדע פונקטן:

  • 1. קיינמאָל צוטרוי באַניצער אַרייַנשרייַב.קאָנטראָלירן די אַרייַנשרייַב פון די באַניצער, איר קענען נוצן רעגולער אויסדרוקן אָדער באַגרענעצן די לענג; גער איין קוואָטעס און טאָפּל "-", עטק.
  • 2. קיינמאָל נוצן דינאַמיש פֿאַרזאַמלונג סקל, איר קענען נוצן פּאַראַמעטערייזד סקל אָדער גלייַך נוצן סטאָרד פּראָוסידזשערז פֿאַר דאַטן אָנפֿרעג און אַקסעס.
  • 3. קיינמאָל נוצן דייטאַבייס קאַנעקשאַנז מיט אַדמיניסטראַטאָר פּריווילאַדזשאַז, נוצן באַזונדער דאַטאַבייס קאַנעקשאַנז מיט לימיטעד פּריווילאַדזשאַז פֿאַר יעדער אַפּלאַקיישאַן.
  • 4. דו זאלסט נישט קראָם קאַנפאַדענטשאַל אינפֿאָרמאַציע גלייַך, ענקריפּט אָדער האַש אויס פּאַסווערדז און שפּירעוודיק אינפֿאָרמאַציע.
  • 5. די ויסנעם אינפֿאָרמאַציע פון ​​די אַפּלאַקיישאַן זאָל געבן ווי ווייניק הינץ ווי מעגלעך, און עס איז בעסטער צו נוצן מנהג טעות אינפֿאָרמאַציע צו ייַנוויקלען די אָריגינעל טעות אינפֿאָרמאַציע
  • 6. די דיטעקשאַן אופֿן פון סקל ינדזשעקשאַן בכלל אַדאַפּץ אַגזיליערי软件אָדער די וועבזייטל פּלאַטפאָרמע צו דעטעקט, די ווייכווארג בכלל ניצט די sql ינדזשעקשאַן דיטעקשאַן געצייַג jsky, די וועבזייטל פּלאַטפאָרמע האט די Yisi וועבזייטל זיכערהייט פּלאַטפאָרמע דיטעקשאַן געצייַג. MDCSOFT SCAN עט על.ניצן MDCSOFT-IPS קענען יפעקטיוולי באַשיצן קעגן SQL ינדזשעקשאַן, XSS אנפאלן, עטק.

פאַרהיטן סקל ינדזשעקשאַן

אין סקריפּטינג שפּראַכן אַזאַ ווי Perl און PHP, איר קענען אַנטלויפן די דאַטן וואָס דער באַניצער האָט אַרייַן צו פאַרמייַדן SQL ינדזשעקשאַן.

די MySQL פאַרלענגערונג פֿאַר PHP גיט די 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 ().

Hope Chen Weiliang בלאָג ( https://www.chenweiliang.com/ ) שערד "ווי קען MySQL פאַרמיידן sql ינדזשעקשאַן? sql ינדזשעקשאַן פּרינציפּ און פאַרהיטונג", עס וועט העלפֿן איר.

ברוכים הבאים צו טיילן דעם לינק פון דעם אַרטיקל:https://www.chenweiliang.com/cwl-500.html

ברוכים הבאים צו די טעלעגראַם קאַנאַל פון Chen Weiliang ס בלאָג צו באַקומען די לעצטע דערהייַנטיקונגען!

🔔 זייט דער ערשטער צו באַקומען די ווערטפול "ChatGPT אינהאַלט מאַרקעטינג אַי געצייַג באַניץ גייד" אין די קאַנאַל שפּיץ וועגווייַזער! 🌟
📚 דער פירער כּולל ריזיק ווערט, 🌟 דאָס איז אַ זעלטן געלעגנהייט, טאָן ניט פעלן עס! ⏰⌛💨
ייַנטיילן און ווי אויב איר ווילט!
דיין ייַנטיילונג און לייקס זענען אונדזער קעסיידערדיק מאָוטאַוויישאַן!

 

发表 评论

אייער בליצפּאָסט אַדרעס וועט נישט זיין ארויס. פארלאנגט פעלדער זענען געניצט * פירמע

מעגילע צו שפּיץ