请问这个PHP下防范MySQL注入攻击的方法管用吗?
function strinput($input)
{
$input=strval($input);
$replace=array('union','load','and','or','select','update','insert','delete','create','char','ascII','ord','conv','=','--','#','*','%','_','\\','\'',"\"");
$input=str_ireplace($replace,"0",$input);
return $input;
}
定义一个这样的过滤函数,对所有GPC来的字符串数据都先过一遍。这样可以完全防范MySQL注入攻击吗?
回复内容:
这类的过滤只能给注入者增加一些麻烦,远远做不到完全防范。1、注入者可以用sElEcT来代替select
2、注入者可以用selselectect来让你过滤一遍,尝试获得select
3、注入者可以用url码来替代所有输入
4、注入者可以。。。用很多种方法,试出你的过滤函数是什么样的
你和注入者的技能可以在遭受泄露的拉锯战中不断获得提升。
直到你使用了以下方法的其中之一,才开始踏上了安全的征程:
1、白名单。严格定义只能输入哪些字符来查询,其他一律不行。
2、参数化查询。先将SQL语言编译,再代入参数。这时候就算他提交了select * from password where table=admin也只会去查询这一长串字符而不会执行SQL语句了。php下的示例如李世光所说。 这个函数做到完全防范MySQL注入攻击还是比较难的,攻与防本来就是动态的,要是实现一劳永逸的防守还是有难度的。
1、针对一些安全防御,可能目前没法绕过,但是随着对攻击技术的研究可能就会出现绕过方法,像dedecms、dz等的安全防御经常被bypass。
2、根据你业务的不同,实现业务的代码可能就提供了绕过方法。例如一个简单的搜索业务,可能在后面的代码会调用urldecode解码函数:
.....
$q = strinput($_GET['query']);
$q = urldecode($q);
$sql = "select * from table where key='".$q."'";
.....
你在urldecode前面做的所有过滤都是徒劳的
要做到尽量减少安全漏洞不只是sql注入,需要在恰当的地方做正确的事情。这可能要了解一些安全知识,像《白帽子讲web安全》,《web前端黑客》都是web安全不错的书籍。
php安全的在线文档(e文):Survive The Deep End: PHP Security 关于mysql防护其实很简单。
1.使用PDO::prepare PDO::bindParam来过滤输入参数
2.将HTML转成实体 htmlspecialchars 用PHP的PDO扩展去使用数据库,该扩展封装的类和方法已经考虑了防注入。 用PHP的安全函数在query的时候把变量转义一下就可以了。 建议使用参数化查询或白名单。
黑名单几乎在任何时候都是不可取的。 请使用pdo 不要自作聪明地过滤,总会有遗漏的地方的,你过滤不完的。
请用pdo + 参数绑定,一劳永逸,一了百了。 你要注意到,这样子很有可能过滤用户的合法输入。
过滤sql注入的方法常见的有如下两种:
1 mysql_real_escape_string
2 pdo的prepare+bind
另,网站安全性不止是sql注入一方面,还要考虑到csrf和xss等。 字符串过滤:
1>mysql_real_escape_string
2>PDO::prepare

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Fonction signifie fonction. Il s'agit d'un bloc de code réutilisable avec des fonctions spécifiques. C'est l'un des composants de base d'un programme. Il peut accepter des paramètres d'entrée, effectuer des opérations spécifiques et renvoyer des résultats. code pour améliorer la réutilisabilité et la maintenabilité du code.

Préparation Utilisez vuecreateexample pour créer un projet. Les paramètres sont à peu près les suivants : utiliser l'entrée native est principalement la valeur et le changement. Les données doivent être synchronisées lors du changement. App.tsx est le suivant : import{ref}from'vue';exportdefault{setup(){//username est la donnée constusername=ref('Zhang San');//Lorsque la zone de saisie change, synchronisez les données constonInput =;retour( )=>({

Comment implémenter le champ caché d'entrée Laravel : 1. Recherchez et ouvrez le fichier de modèle Blade ; 2. Utilisez la méthode method_field dans le modèle Blade pour créer un champ masqué. La syntaxe de création est "{{ method_field('DELETE') }}. ".

MySQL est un système de gestion de bases de données relationnelles couramment utilisé qui fournit une variété de fonctions pour traiter et exploiter les données. Parmi eux, la fonction REPLACE est utilisée pour remplacer la partie spécifiée de la chaîne. Dans cet article, nous présenterons comment utiliser la fonction REPLACE pour le remplacement de chaînes dans MySQL et démontrerons son utilisation à travers des exemples de code. Tout d’abord, jetons un œil à la syntaxe de la fonction REPLACE : REPLACE(str, search_str, replace_str).

Solutions pour cliquer sur la zone de saisie sans curseur : 1. Confirmez le focus de la zone de saisie ; 2. Effacez le cache du navigateur 3. Mettez à jour le navigateur 4. Utilisez JavaScript 5. Vérifiez le périphérique matériel ; propriétés de la boîte ; 7. Débogage du code JavaScript ; 8. Vérifiez les autres éléments de la page ;

Quelles sont les techniques de recherche et de remplacement de chaînes en Python ? (Exemple de code spécifique) En Python, les chaînes sont un type de données courant, et nous rencontrons souvent des opérations de recherche et de remplacement de chaînes dans la programmation quotidienne. Cet article présentera quelques techniques courantes de recherche et de remplacement de chaînes, accompagnées d'exemples de code spécifiques. Pour rechercher une sous-chaîne spécifique dans une chaîne, vous pouvez utiliser la méthode find() ou la méthode index() de la chaîne. La méthode find() renvoie l'index de la première occurrence de la sous-chaîne dans la chaîne.

Dans cet article, nous découvrirons la fonction enumerate() et le but de la fonction « enumerate() » en Python. Qu'est-ce que la fonction enumerate() ? La fonction enumerate() de Python accepte une collection de données comme paramètre et renvoie un objet d'énumération. Les objets d'énumération sont renvoyés sous forme de paires clé-valeur. La clé est l'index correspondant à chaque élément, et la valeur est les éléments. Syntaxe enumerate(iterable,start) Paramètres iterable - Les données transmises dans la collection peuvent être renvoyées sous forme d'objet d'énumération, appelé iterablestart - Comme son nom l'indique, l'index de départ de l'objet d'énumération est défini par start. si nous ignorons

Explication détaillée du rôle et de la fonction de la table MySQL.proc MySQL est un système de gestion de bases de données relationnelles populaire. Lorsque les développeurs utilisent MySQL, ils impliquent souvent la création et la gestion de procédures stockées (StoredProcedure). La table MySQL.proc est une table système très importante. Elle stocke les informations relatives à toutes les procédures stockées dans la base de données, y compris le nom, la définition, les paramètres, etc. Dans cet article, nous expliquerons en détail le rôle et les fonctionnalités de la table MySQL.proc
