Table des matières
Préface
Instructions
Objets d'audit
Modification
Le but
Déterminer la source et le puits
Définition du puits
Définition de la source
最终脚本
Maison Opération et maintenance Sécurité Comment Codeql analyse le problème des cookies n'activant pas httponly

Comment Codeql analyse le problème des cookies n'activant pas httponly

May 17, 2023 pm 05:25 PM
cookie httponly codeql

Préface

Aujourd'hui, nous utilisons codeql pour analyser les problèmes de sécurité tels que "le cookie n'est pas activé http uniquement", approfondissant ainsi notre utilisation de codeql. Si cela fonctionne bien, vous pouvez envisager de corriger d'autres vulnérabilités dans Vulnerability-goapp.

Vous devez en outre télécharger codeql-go lors de l'analyse des programmes go

Instructions

Objets d'audit

Vulnérabilité-goapp : application Web golang vulnérable pour l'éducation.

Modification

Étant donné que tous les cookies de ce projet n'ont pas l'attribut http uniquement défini, nous devons d'abord les modifier avant la comparaison. Ce qui suit est une réécriture de la phrase originale : Modification de l'enregistrement : ajoutez l'option http uniquement à certains paramètres de cookies.

pkgadminadmin.go est modifié comme suit.
Comment Codeql analyse le problème des cookies nactivant pas httponly

pkgloginlogin.go est modifié comme suit.
Comment Codeql analyse le problème des cookies nactivant pas httponly

pkgregisterregister.go est modifié comme suit.
Comment Codeql analyse le problème des cookies nactivant pas httponly

N'oubliez pas de régénérer la base de données après modification (si vous devez écraser l'ancienne base de données, vous devez d'abord supprimer l'ancienne puis en générer une nouvelle.

Le but

est d'utiliser le script codeql pour trouver que httponly n'est pas défini et httponly est défini) Mais la valeur de httponly est fausse (généralement ce n'est pas le cas, mais ce n'est pas garanti

Déterminer la source et le puits

Définition du puits

Le puits est très simple). Lors de la définition des cookies, vous devez utiliser la méthode http.SetCookie. La valeur du cookie qui doit être définie est le deuxième paramètre de cette fonction, puis nous pouvons écrire une instruction de requête pour trouver un récepteur comme celui-ci

import go
from DataFlow::Node sink
where exists(DataFlow::CallNode c |
      c.getTarget().hasQualifiedName("net/http", "SetCookie") and c.getArgument(1) = sink
    )
select sink
Copier après la connexion

After. en cours d'exécution, vous pouvez obtenir les résultats suivants. En cliquant sur n'importe quel élément, vous accéderez à l'exigence composée sous le segment de code
Comment Codeql analyse le problème des cookies nactivant pas httponly

Nous le convertissons en classe Sink, comme suit

private class Sink extends DataFlow::Node {
  Sink() {
    exists(DataFlow::CallNode c |
      c.getTarget().hasQualifiedName("net/http", "SetCookie") and c.getArgument(1) = this
    )
  }
}
Copier après la connexion

Après cela, en définissant une variable. comme Sink, il fait référence à tous les extraits de code qui remplissent les conditions, par exemple :

import go

private class Sink extends DataFlow::Node {
  Sink() {
    exists(DataFlow::CallNode c |
      c.getTarget().hasQualifiedName("net/http", "SetCookie") and c.getArgument(1) = this
    )
  }
}

from Sink s
select s
Copier après la connexion

Après l'exécution Le même résultat sera obtenu

Définition de la source

Ensuite, nous déterminons la source à en juger par les paramètres reçus par http. Méthode SetCookie, le deuxième paramètre réel est un pointeur vers la structure d'un Cookie
Comment Codeql analyse le problème des cookies nactivant pas httponlyComment Codeql analyse le problème des cookies nactivant pas httponly

Donc, nous devons d'abord trouver une telle structure. Nous pouvons d'abord lister toutes les structures du projet. codeql-go est le suivant


Comment Codeql analyse le problème des cookies nactivant pas httponlyDonc, notre script de requête est également

import go

from StructLit source
select source
Copier après la connexion

Toutes les structures sont répertoriées comme prévu


Comment Codeql analyse le problème des cookies nactivant pas httponlyEnsuite, l'étape suivante consiste à éliminer les autres contenus non pertinents et à restreindre les types. la méthode hasQualifiedName, différents types dans Codeql-go. Ils ont tous la même méthode, définie comme suit, à quel package appartient l'objet et quel est son nom

Si vous n'êtes pas sûr, vous pouvez imprimer les champs pertinents. via getPackage et getName, par exemple

import go

from StructLit source
// where source.getType().hasQualifiedName("net/http", "Cookie")
select source.getType().getPackage(), source.getType().getName()
Copier après la connexion
Comment Codeql analyse le problème des cookies nactivant pas httponlyLes résultats sont les suivants

Nous pouvons trouver la définition source, par exemple

import go

from StructLit source
where source.getType().hasQualifiedName("net/http", "Cookie")
select source
Copier après la connexion

Comment Codeql analyse le problème des cookies nactivant pas httponly est également convertie en une sous-classe de DataFlow::Node
private class Source extends DataFlow::Node {
  Source() {
    exists(StructLit s | s.getType().hasQualifiedName("net/http", "Cookie") and this.asExpr() = s)
  }
}
Copier après la connexion

TaintConfig.

Flux de données simpleComment Codeql analyse le problème des cookies nactivant pas httponly

Avec Source et Sink, définissez simplement TaintConfig. Tous les flux de données de la source vers le Sink peuvent être obtenus

import go

private class Source extends DataFlow::Node {
  Source() {
    exists(StructLit s | s.getType().hasQualifiedName("net/http", "Cookie") and this.asExpr() = s)
  }
}

private class Sink extends DataFlow::Node {
  Sink() {
    exists(DataFlow::CallNode c |
      c.getTarget().hasQualifiedName("net/http", "SetCookie") and c.getArgument(1) = this
    )
  }
}

class Configuration extends TaintTracking::Configuration {
  Configuration() { this = "HttpOnly" }

  override predicate isSource(DataFlow::Node source) { source instanceof Source }

  override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
}

from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink
where cfg.hasFlowPath(source, sink)
select source, sink
Copier après la connexion

Les résultats sont les suivants :

Élimination


Cependant, nous n'avons pas encore supprimé. la partie où httponly=true est défini, nous devons donc ajouter la qualification, qui est sur le point d'avoir l'attribut HttpOnly. Les flux de données qui sont vrais sont exclus des résultats Comment Codeql analyse le problème des cookies nactivant pas httponly

Nous pouvons utiliser TaintTracking::isSanitizer fourni par CodeQL pour filtrer. nœuds inoffensifs :

override predicate isSanitizer(DataFlow::Node node) {
    exists(Write w, Field f, DataFlow::Node rhs |
      f.hasQualifiedName("net/http", "Cookie", "HttpOnly") and
      w.writesField(node, f, rhs) and
      rhs.getBoolValue() = true
    )
  }
Copier après la connexion

运行结果如下,但有一处地方需要注意。
Comment Codeql analyse le problème des cookies nactivant pas httponly红框中实际有对HttpOnly进行设置,但我们的脚本并不能识别这样的一个数据流。后面试了各种方法,最终找到一种解决方式,将isSanitizer修改成以下内容。

override predicate isSanitizer(DataFlow::Node node) {
    exists(Write w, Field f, DataFlow::Node n, DataFlow::Node rhs |
      f.hasQualifiedName("net/http", "Cookie", "HttpOnly") and
      w.writesField(n, f, rhs) and
      rhs.getBoolValue() = true and
      node = n.getAPredecessor*()n
    )
  }
Copier après la connexion

其中node=n.getAPredecessor*()是说node是n的前置数据流节点,数据可以在0个或多个步骤中从node流到n。

最终脚本

加上一些信息,模仿官方的示例,最终脚本如下。

/**
 * @name Cookie未设置httponly
 * @description Cookies包含一个HTTPOnly的设置选项,可以使此cookie不能被js读取,而只能用于HTTP请求。
 * @kind path-problem
 * @problem.severity error
 * @precision low
 * @id go/Cookie-not-set-httponly
 * @tags security
 */

import go
import DataFlow::PathGraph

private class Source extends DataFlow::Node {
  Source() {
    exists(StructLit s | s.getType().hasQualifiedName("net/http", "Cookie") and this.asExpr() = s)
  }
}

private class Sink extends DataFlow::Node {
  Sink() {
    exists(DataFlow::CallNode c |
      c.getTarget().hasQualifiedName("net/http", "SetCookie") and c.getArgument(1) = this
    )
  }
}

class Configuration extends TaintTracking::Configuration {
  Configuration() { this = "HttpOnly" }

  override predicate isSource(DataFlow::Node source) { source instanceof Source }

  override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }

  override predicate isSanitizer(DataFlow::Node node) {
    exists(Write w, Field f, DataFlow::Node n, DataFlow::Node rhs |
      f.hasQualifiedName("net/http", "Cookie", "HttpOnly") and
      w.writesField(n, f, rhs) and
      rhs.getBoolValue() = true and
      node = n.getAPredecessor*()
    )
  }
}

from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink
where cfg.hasFlowPath(source, sink)
select sink.getNode(), source, sink, "Cookie-not-set-httponly in $@.", source.getNode(), "here"
Copier après la connexion

最终筛选出存在问题的内容。
Comment Codeql analyse le problème des cookies nactivant pas httponly

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment réparer l'erreur interdite Roblox 403 sur Google Chrome Comment réparer l'erreur interdite Roblox 403 sur Google Chrome May 19, 2023 pm 01:49 PM

De nombreux utilisateurs de Windows ont récemment rencontré une erreur inhabituelle appelée Roblox 403 Forbidden Error en essayant d'accéder aux URL de sites Web dans le navigateur Google Chrome. Même après avoir redémarré l'application Chrome plusieurs fois, ils n'ont rien pu faire. Cette erreur peut avoir plusieurs causes potentielles, dont certaines sont décrites et répertoriées ci-dessous. Historique de navigation et autres caches de Chrome et données corrompues Connexion Internet instable URL de sites Web incorrectes Extensions installées à partir de sources tierces Après avoir examiné tous les aspects ci-dessus, nous avons mis au point quelques correctifs qui peuvent aider les utilisateurs à résoudre ce problème. Si vous rencontrez le même problème, consultez les solutions dans cet article. Correction 1

Où sont les cookies sur votre ordinateur ? Où sont les cookies sur votre ordinateur ? Dec 22, 2023 pm 03:46 PM

Les cookies sur votre ordinateur sont stockés dans des emplacements spécifiques de votre navigateur, en fonction du navigateur et du système d'exploitation utilisés : 1. Google Chrome, stocké dans C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data\Default \Cookies etc.

Où sont stockés les cookies ? Où sont stockés les cookies ? Dec 20, 2023 pm 03:07 PM

Les cookies sont généralement stockés dans le dossier cookie du navigateur. Les fichiers cookies dans le navigateur sont généralement stockés au format binaire ou SQLite. Si vous ouvrez le fichier cookie directement, vous pouvez voir du contenu tronqué ou illisible, il est donc préférable d'utiliser Utiliser. l'interface de gestion des cookies fournie par votre navigateur pour visualiser et gérer les cookies.

Où sont les cookies mobiles ? Où sont les cookies mobiles ? Dec 22, 2023 pm 03:40 PM

Les cookies sur le téléphone mobile sont stockés dans l'application de navigation de l'appareil mobile : 1. Sur les appareils iOS, les cookies sont stockés dans Paramètres -> Safari -> Avancé -> Données du site Web du navigateur Safari 2. Sur les appareils Android, les cookies sont stockés ; dans Paramètres -> Paramètres du site -> Cookies du navigateur Chrome, etc.

Comment fonctionnent les cookies Comment fonctionnent les cookies Sep 20, 2023 pm 05:57 PM

Le principe de fonctionnement des cookies implique que le serveur envoie des cookies, que le navigateur stocke les cookies et que le navigateur traite et stocke les cookies. Introduction détaillée : 1. Le serveur envoie un cookie et le serveur envoie un en-tête de réponse HTTP contenant le cookie au navigateur. Ce cookie contient certaines informations, telles que l'authentification de l'identité de l'utilisateur, les préférences ou le contenu du panier. Une fois que le navigateur aura reçu ce cookie, il sera stocké sur l'ordinateur de l'utilisateur. 2. Le navigateur stocke les cookies, etc.

Explication détaillée de l'endroit où les cookies du navigateur sont stockés Explication détaillée de l'endroit où les cookies du navigateur sont stockés Jan 19, 2024 am 09:15 AM

Avec la popularité d’Internet, l’utilisation de navigateurs pour surfer sur Internet est devenue un mode de vie. Dans l'utilisation quotidienne des navigateurs, nous rencontrons souvent des situations où nous devons saisir les mots de passe de comptes, comme les achats en ligne, les réseaux sociaux, les e-mails, etc. Ces informations doivent être enregistrées par le navigateur afin qu'elles n'aient pas besoin d'être saisies à nouveau lors de votre prochaine visite. C'est alors que les cookies sont utiles. Que sont les cookies ? Le cookie fait référence à un petit fichier de données envoyé par le serveur au navigateur de l'utilisateur et stocké localement. Il contient le comportement des utilisateurs de certains sites Web.

Quels sont les dangers d'une fuite de cookies ? Quels sont les dangers d'une fuite de cookies ? Sep 20, 2023 pm 05:53 PM

Les dangers de la fuite de cookies incluent le vol d’informations d’identité personnelle, le suivi du comportement personnel en ligne et le vol de compte. Introduction détaillée : 1. Des informations d'identité personnelle ont été volées, telles que le nom, l'adresse e-mail, le numéro de téléphone, etc. Ces informations peuvent être utilisées par des criminels pour mener des activités illégales telles que le vol d'identité et la fraude 2. Le comportement personnel en ligne est suivi ; et analysés via des cookies. Grâce aux données du compte, les criminels peuvent connaître l'historique de navigation de l'utilisateur, ses préférences d'achat, ses loisirs, etc. 3. Le compte est volé, en contournant la vérification de connexion, en accédant directement au compte de l'utilisateur, etc.

La suppression des cookies a-t-elle un impact ? La suppression des cookies a-t-elle un impact ? Sep 20, 2023 pm 06:01 PM

Les effets de la suppression des cookies incluent la réinitialisation des paramètres et des préférences de personnalisation, affectant l'expérience publicitaire et la destruction du statut de connexion et des fonctions de mémorisation du mot de passe. Introduction détaillée : 1. Réinitialiser les paramètres et préférences personnalisés. Si les cookies sont effacés, le panier sera réinitialisé et les produits devront être rajoutés. La suppression des cookies entraînera également la perte du statut de connexion sur les plateformes de médias sociaux, ce qui nécessitera. ré-ajout. Entrez votre nom d'utilisateur et votre mot de passe ; 2. Cela affecte l'expérience publicitaire. Si les cookies sont effacés, le site Web ne sera pas en mesure de comprendre nos intérêts et nos préférences, et affichera des publicités non pertinentes, etc.

See all articles