Maison > développement back-end > tutoriel php > Attaques et solutions de sécurité PHP courantes

Attaques et solutions de sécurité PHP courantes

小云云
Libérer: 2023-03-21 09:58:02
original
2652 Les gens l'ont consulté

Cet article partage principalement avec vous les attaques et solutions de sécurité PHP courantes. Comprendre les menaces de sécurité courantes des applications PHP peut garantir que votre application PHP ne soit pas attaquée. Par conséquent, cet article répertorie 6 attaques de sécurité PHP courantes. Tout le monde est invité à lire et à apprendre.

1. Injection SQL

L'injection SQL est une attaque malveillante dans laquelle les utilisateurs saisissent des instructions SQL dans les champs de formulaire pour affecter l'exécution normale de SQL. Il en existe également une injectée via la commande system() ou exec(), qui a le même mécanisme d'injection SQL, mais cible uniquement les commandes shell.

01    $username = $_POST[&#39;username&#39;];02    $query = "select * from auth where username = &#39;".$username."&#39;";03    echo $query;04    $db = new mysqli(&#39;localhost&#39;, &#39;demo&#39;, ‘demo&#39;, ‘demodemo&#39;);05    $result = $db->query($query);06    if ($result && $result->num_rows) {07        echo "<br />Logged in successfully";08    } else {09        echo "<br />Login failed";10    }
Copier après la connexion

Le code ci-dessus ne filtre ni n'échappe à la valeur saisie par l'utilisateur ($_POST['username']) sur la première ligne. Ainsi, la requête peut échouer, voire corrompre la base de données, selon que $username contient ou non la transformation de votre instruction SQL en autre chose.

Empêcher l'injection SQL

Options :

使用mysql_real_escape_string()过滤数据
手动检查每一数据是否为正确的数据类型
使用预处理语句并绑定变量
Copier après la connexion

Utiliser les instructions préparées

分离数据和SQL逻辑
预处理语句将自动过滤(如:转义)
把它作为一个编码规范,可以帮助团队里的新人避免遇到以上问题
Copier après la connexion
01    $query = &#39;select name, district from city where countrycode=?&#39;;02    if ($stmt = $db->prepare($query) )03    {04        $countrycode = &#39;hk&#39;;05        $stmt->bind_param("s", $countrycode); 
06        $stmt->execute();07        $stmt->bind_result($name, $district);08        while ( $stmt ($stmt->fetch() ){09            echo $name.&#39;, &#39;.$district;10            echo &#39;<br />&#39;;11        }12        $stmt->close();13    }
Copier après la connexion

2. 🎜>XSS (Cross-Site Scripting) est une attaque dans laquelle l'utilisateur saisit certaines données dans votre site Web, qui incluent un script côté client (généralement JavaScript). Si vous exportez des données vers une autre page Web sans filtrage, ce script sera exécuté.

Recevoir le contenu texte soumis par les utilisateurs

Que va-t-il se passer ?
01    <?php02    if (file_exists(&#39;comments&#39;)) {03        $comments = get_saved_contents_from_file(&#39;comments&#39;);04    } else {05        $comments = &#39;&#39;;06    }07     08    if (isset($_POST[&#39;comment&#39;])) {09        $comments .= &#39;<br />&#39; . $_POST[&#39;comment&#39;];10        save_contents_to_file(&#39;comments&#39;, $comments);11    }12    >
输出内容给(另一个)用户1    <form action=&#39;xss.php&#39; method=&#39;POST&#39;>2    Enter your comments here: <br />3    <textarea name=&#39;comment&#39;></textarea> <br />4    <input type=&#39;submit&#39; value=&#39;Post comment&#39; />5    </form><hr /><br />6     7    <?php echo $comments; ?>
Copier après la connexion

Prévenir les attaques XSS : afin d'empêcher les attaques XSS, utilisez la fonction htmlentities() de PHP pour filtrer puis afficher le navigateur. L'utilisation de base de htmlentities() est simple, mais de nombreux contrôles avancés sont disponibles, voir l'aide-mémoire XSS.
烦人的弹窗
刷新或重定向
损坏网页或表单
窃取cookie
AJAX(XMLHttpRequest)
Copier après la connexion

3. Fixation de session

Sécurité de session, en supposant qu'un PHPSESSID est difficile à deviner. Cependant, PHP peut accepter un identifiant de session via un cookie ou une URL. Par conséquent, l’usurpation d’identité d’une victime peut utiliser un identifiant de session spécifique (ou autre) ou une attaque de phishing.

4. Capture de session et détournement

C'est la même idée que la fixation de session, cependant, cela implique de voler l'ID de session. Si l'ID de session est stocké dans un cookie, il peut être volé par un attaquant via XSS et JavaScript. Si l'ID de session est inclus dans l'URL, il peut également être obtenu par reniflage ou à partir du serveur proxy.

Empêcher la capture et le détournement de session

5. Contrefaçon de requête intersite (CSRF)
更新ID
如果使用会话,请确保用户使用SSL
Copier après la connexion

Une attaque CSRF fait référence à une requête faite par une page qui ressemble à Soyez un utilisateur confiant du site, mais pas intentionnellement. Il existe de nombreuses variantes, comme cet exemple :

Prévenir la falsification de requêtes intersites
1    ![](http://example.com/single_click_to_buy.php?user_id=123&item=12345)
Copier après la connexion

En général, assurez-vous que l'utilisateur provient de votre formulaire et correspond à tous ceux que vous envoyez hors forme. Il y a deux points à retenir :

6. Injection de code
对用户会话采用适当的安全措施,例如:给每一个会话更新id和用户使用SSL。
生成另一个一次性的令牌并将其嵌入表单,保存在会话中(一个会话变量),在提交时检查它。
Copier après la connexion

L'injection de code est provoquée par l'exploitation de vulnérabilités informatiques en traitant des données invalides. Le problème survient lorsque vous exécutez accidentellement du code arbitraire, généralement via l'inclusion de fichiers. Un code mal écrit peut permettre à un fichier distant d'être inclus et exécuté. Comme beaucoup de fonctions PHP, comme require peut contenir une URL ou un nom de fichier, par exemple :

Dans l'exemple ci-dessus, en passant un nom de fichier ou une partie de nom de fichier saisi par l'utilisateur, il contient l'URL commençant par "http" Les fichiers commençant par ://".
01    <form>Choose theme:02        <select name = theme>03            <option value = blue>Blue</option>04            <option value = green>Green</option>05            <option value = red>Red</option>06        </select>07        <input type = submit>08    </form>09    <?php10        if($theme) {11            require($theme.&#39;.txt&#39;);12        }13    ?>
Copier après la connexion

Empêcher l'injection de code

Autres principes généraux
过滤用户输入
在php.ini中设置禁用allow_url_fopen和allow_url_include。这将禁用require/include/fopen的远程文件。
Copier après la connexion

    Ne vous fiez pas à la configuration du serveur pour protéger votre application, surtout lorsque votre site Web Le serveur/PHP est géré par votre FAI ou peut être déplacé/déployé ailleurs dans le futur lorsque votre site Web est déplacé/déployé ailleurs. Veuillez intégrer des contrôles/logiques axés sur la sécurité dans le code de votre site Web (HTML, JavaScript, PHP, etc.).
  1. Concevez des scripts de sécurité côté serveur :
  2. —par exemple, utilisez une seule ligne d'exécution - point unique d'authentification et de nettoyage des données

    —par exemple, intégrez un PHP dans toutes les pages sensibles à la sécurité Fonction/fichier qui gère toutes les vérifications de connexion/logique de sécurité

  3. Assurez-vous que votre code est mis à jour et corrigé avec la dernière version.
  4. Recommandations associées :

Explication détaillée des exemples de sécurité PHP

Téléchargez des images en toute sécurité avec PHP

Résumé détaillé des enregistrements de configuration de sécurité PHP et des erreurs courantes

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal