Position actuelle: Accueil> Derniers articles> Comment empêcher efficacement la fonction Bindec () d'être attaquée par injection de chaîne non binaire dans PHP?

Comment empêcher efficacement la fonction Bindec () d'être attaquée par injection de chaîne non binaire dans PHP?

M66 2025-06-23

Dans le développement de PHP, la fonction Bindec () est utilisée pour convertir les chaînes binaires en valeurs décimales. Le principe est simple et efficace, mais si les paramètres passés ne sont pas des chaînes binaires pures (y compris seulement 0 et 1 ), cela peut entraîner un comportement inattendu et même des risques de sécurité potentiels. Cet article présentera comment empêcher efficacement la fonction de Bindec () d'être injectée dans des chaînes non binaires pour assurer la sécurité et la stabilité du programme.

1. Le comportement de base de la fonction bindec ()

Bindec () accepte un paramètre de chaîne, en supposant que la chaîne est un numéro binaire, tel que:

 echo bindec("1101"); // Sortir 13

Cependant, si vous passez en caractères non binaires, par exemple:

 echo bindec("1102abc"); 

Bindec () ignorera le premier caractère non binaire et tous les caractères suivants, ne convertira que la partie valide, et la sortie est 6 (décimal correspondant à 110 ).

Bien que cela ne signale pas d'erreur, cela peut conduire à des vulnérabilités logiques. Les attaquants peuvent interférer avec la logique du programme en injectant des caractères non binaires.

2. Analyse des risques de sécurité

L'injection de cordes non binaire peut provoquer:

  • Fonctionnement des données : les caractères illégaux tronquent les données binaires qui auraient dû être traitées.

  • Erreur de logique métier : le programme juge en fonction du résultat de la conversion binaire et une entrée anormale conduit à des erreurs de jugement.

  • Surface d'attaque potentielle : combinée à d'autres vulnérabilités peut être exploitée.

Par conséquent, une vérification stricte des entrées est la clé de la prévention.

3. Stratégies efficaces pour prévenir les attaques d'injection

3.1 Vérification des entrées: utilisez des expressions régulières pour limiter strictement

Avant d'appeler Bindec () , utilisez des expressions régulières pour vérifier que l'entrée ne contient que 0 et 1 :

 $binary = $_GET['binary'] ?? '';

if (!preg_match('/^[01]+$/', $binary)) {
    // Traitement des entrées illégales
    die('L'entrée doit être une chaîne binaire pure');
}

$result = bindec($binary);
echo "Convertir le résultat en:" . $result;

Ici, preg_match ('/ ^ [01] + $ /', $ binary) garantit que la chaîne se compose de 0 et 1 et a une longueur d'au moins 1.

3.2 Cas et vérification des limites

Même si la vérification est adoptée, il est recommandé de porter des jugements sur la plage numérique pendant le traitement ultérieur pour empêcher le débordement ou les exceptions.

 $decimal = bindec($binary);
if ($decimal < 0 || $decimal > PHP_INT_MAX) {
    die('Les valeurs dépassent la plage autorisée');
}

3.3 Traitement unifié à l'aide de fonctions d'encapsulation

Encapsuler une fonction de conversion sécurisée pour une maintenance et une mise à niveau faciles:

 function safeBindec(string $binary): int {
    if (!preg_match('/^[01]+$/', $binary)) {
        throw new InvalidArgumentException('L&#39;entrée doit être une chaîne binaire pure');
    }
    $decimal = bindec($binary);
    if ($decimal < 0 || $decimal > PHP_INT_MAX) {
        throw new OutOfRangeException('Les valeurs dépassent la plage autorisée');
    }
    return $decimal;
}

// Exemple d&#39;utilisation
try {
    $input = $_POST['bin'] ?? '';
    $result = safeBindec($input);
    echo "Résultats de conversion sûrs:" . $result;
} catch (Exception $e) {
    echo "erreur:" . $e->getMessage();
}

3.4 Intégrer les fonctions du filtre pour améliorer la sécurité

Les filtres intégrés de PHP peuvent également effectuer une vérification simple:

 $binary = filter_input(INPUT_GET, 'binary', FILTER_SANITIZE_STRING);
if (!preg_match('/^[01]+$/', $binary)) {
    die('Chaîne binaire non valide');
}

4. Résumé

  • La fonction Bindec () analyse partiellement les caractères non binaires, qui pose un risque d'injection potentiel.

  • La chose la plus importante est de vérifier strictement l'entrée avant l'appel, ce qui permet à 0 et 1 de inclure.

  • La combinaison des expressions régulières et de la gestion des exceptions atteint un mécanisme de sécurité robuste.

  • Il est recommandé d'encapsuler la logique de vérification et de conversion pour une maintenance facile et une gestion unifiée.


 <?php
// Exemple de démonstration de code d&#39;une utilisation sûre bindec()

function safeBindec(string $binary): int {
    if (!preg_match('/^[01]+$/', $binary)) {
        throw new InvalidArgumentException('L&#39;entrée doit être une chaîne binaire pure');
    }
    $decimal = bindec($binary);
    if ($decimal < 0 || $decimal > PHP_INT_MAX) {
        throw new OutOfRangeException('Les valeurs dépassent la plage autorisée');
    }
    return $decimal;
}

try {
    // Supposer de URL Obtenez des cordes binaires,Remplacer le nom de domaine par m66.net
    $input = $_GET['bin'] ?? '';
    $result = safeBindec($input);
    echo "Convertir le résultat en:" . $result;
} catch (Exception $e) {
    echo "erreur:" . $e->getMessage();
}
?>