SQL Injection Attack fait référence à l'exploitation des vulnérabilités de conception, à l'exécution de commandes SQL sur les serveurs cibles et à d'autres attaques.
La principale raison pour laquelle l'attaque d'injection SQL réussit lors de la génération de commandes SQL dynamiquement.
Par exemple:
Si votre instruction de requête est sélectionnée * sur admin où username = '"& utilisateur &"' et mot de passe = '"& pwd &"' "
Alors, si mon nom d'utilisateur est: 1 'ou' 1 '=' 1
Ensuite, votre déclaration de requête deviendra:
SELECT * FROM admin where username = '1 ou' 1 '=' 1 'et mot de passe =' "& pwd &" '"
De cette façon, votre déclaration de requête sera adoptée et vous pouvez entrer votre interface de gestion.
Par conséquent, lors de la prévention, vous devez vérifier les entrées de l'utilisateur. Des caractères spéciaux spéciaux, tels que des citations simples, des citations doubles, des demi-colons, des virgules, des colons, des connexions, etc., sont converties ou filtrées.
Les caractères spéciaux et les chaînes qui doivent être filtrés sont:
utilisateur net
xp_cmdshell
/ajouter
exec maître.dbo.xp_cmdshell
Administrateurs de groupes locaux nets
sélectionner
compter
ASC
carboniser
milieu
'
:
"
insérer
supprimer
table de chute
mise à jour
tronquer
depuis
%
Voici deux codes de prévention que j'ai écrits sur la résolution d'attaques d'injection pour votre référence d'apprentissage!
Version JS du code d'attaque d'injection SQL ~:
[Démarrage du code]
<script linguisse = "javascript">
<! -
var url = location.search;
var re = / ^ /? (. *) (SELECT% 20 | INSERT% 20 | Supprimer% 20from% 20 | Count / (| Drop% 20Table | Update% 20Trate% 20 | ASC / (| mid / (| char / (| xp_cmdshell | exec% 20Master | net% 20Localgroup% 20Administrateurs | / "|: | net% 20User | / '|% 20or% 20) (. *) $ / gi;
var e = re.test (url);
if (e) {
alert ("L'adresse contient des caractères illégaux ~");
location.href = "error.asp";
}
// ->
<cript>
[Fin du code]
Version ASP du code pour empêcher les attaques d'injection SQL ~:
[Démarrage du code]
<%
Sur l'erreur reprendre ensuite
Saim strtemp
Si LCase (request.servervariables ("https")) = "off"
strtemp = "http: //"
Autre
strtemp = "https: //"
Terminer si
strTemp = strTemp & request.servervariables ("server_name")
Si request.servervariables ("server_port") <> 80 alors strTEmp = strTemp & ":" & request.servervariables ("server_port")
StrTemp = StrTemp & Request.ServerVariables ("URL")
Si Trim (request.QueryString) <> "" alors strTemp = strTemp & "?"
strTEmp = lCase (strTEmp)
Si instlin (strTEmp, "Select% 20") ou instlin (strTEmp, "insérer% 20") ou instlit (strTEmp, "supprimer% 20from") ou instlit (strTEmp, "count (") ou instr (strTemp, "drop (drop (drop (drop (drop (drop (drop (drop (drop (drop (drop (drop (drop (drop (drop (Drop," % 20Table ") ou instlin (strTEmp," Update% 20 ") ou instlin (strTEmp," truncate% 20 ") ou instlin (strTEmp," asc (") ou instlin (strTEmp," mid (") ou instlin (strTEmp (StrTemp , "char (") ou instlit (strTEmp, "xp_cmdshell") ou Instant (strTEmp, "exec% 20master") ou instlin (strTEmp, "net% 20Localgroup% 20administrateurs") ou instlit (strTEmp, ":") ou instlit (strTEmp, "net% 20User") ou instlit (strTEMP, "' ") ou instlin (strTEmp,"% 20or% 20 ") puis
Réponse.write "<script linguisse = 'javascript'>"
Response.Write "Alert ('Adresse illégale !!');"
Réponse.write "location.href = 'error.asp';"
Réponse.WRITE "<Script>"
Terminer si
%>
[Fin du code]
C # Vérifiez les chaînes pour empêcher les attaques d'injection SQL
Dans cet exemple, il est provisoirement spécifié comme = et 'nombres
bool checkParams (params objet [] args)
{
String [] Lawless = {"=", "'"};
if (Lawlesses == null || Lawless.length <= 0) renvoie true;
// Construisez des expressions régulières, exemple: les sans droit sont le = signe et le signe, alors l'expression régulière est. * [=} ']. * (Pour le contenu connexe des expressions régulières, veuillez voir MSDN)
// De plus, comme je veux faire des fonctions générales et faciles à modifier, j'ai une autre étape de la matrice de caractères aux expressions régulières.
String str_regex = ". * [";
for (int i = 0; i <lawlesses.length-1; i ++)
str_regex + = délavage [i] + "|";
str_regex + = délavage [Lawless.length-1] + "]. *";
//
foreach (objet arg dans args)
{
si (arg est une chaîne) // s'il s'agit d'une chaîne, vérifiez directement
{
if (regex.matches (arg.toString (), str_regex) .Count> 0)
retourne false;
}
else if (arg is icollection) // Si c'est une collection, vérifiez si l'élément de la collection est une chaîne.
{
foreach (objet obj dans (icollection) arg)
{
si (obj est une chaîne)
{
if (regex.matches (obj.toString (), str_regex) .Count> 0)
retourne false;
}
}
}
}
Retour Vrai;