繁体   English   中英

从Active Directory进行SQL注入

[英]SQL injection from an Active Directory

我有一个我不明白的问题。 我想制作一个PHP脚本,它将从Active Directory中填充一些sql表。

这是我的代码的一部分: $result=ldap_list($connect, "OU=PROFS,".$base_dnref, "(ou=*)");

$res = ldap_get_entries($connect, $result);

for ($i=0; $i < $res["count"]; $i++) {
$result2=ldap_list($connect, "OU=".$res[$i]["ou"][0].",OU=PROFS,".$base_dnref, "(cn=*)");
$res2 = ldap_get_entries($connect, $result2);
for($j=0;$j<$res2["count"];$j++){

    $insert=$db->query("INSERT INTO PROFESSEURS(NOM) VALUES ('".$res2[$j]["cn"][0]."')");
    $insert->fetch();
}
}




$result=ldap_list($connect, "OU=ELEVES,".$base_dnref, "(ou=*)");

$res = ldap_get_entries($connect, $result);

for ($z=0; $z < $res["count"]; $z++) {

$insert=$db->query("INSERT INTO CLASSE(NUMERO) VALUES ('".strval($res[$z]["ou"][0])."')");
$insert->fetch();

$result2=ldap_list($connect, "OU=".$res[$z]["ou"][0].",OU=ELEVES,".$base_dnref, "(cn=*)");
$res2 = ldap_get_entries($connect, $result2);

for($y=0;$y<$res2["count"];$y++){

    $insert=$db->query("INSERT INTO ELEVE(NOM) VALUES ('".$res2[$y]["cn"][0]."')");
    $insert->fetch();

}
}



}
catch (PDOException $e) {
   print 'Exception : ' . $e->getMessage();
}`

问题在于,第一个双打for完美,但是第二个却不能。 但是我使用了相同的语法。 错误为:“异常:SQLSTATE [HY000]:常规错误”。

另外,查询$insert=$db->query("INSERT INTO CLASSE(NUMERO) VALUES ('".strval($res[$z]["ou"][0])."')"); 可以正常工作,但只能使用一半的Active Directory数据,而另一半则不能。 我确定问题不是出自LDAP路径,为此我使用LDAPExplorerTool。

请问你能帮帮我吗 ?

请使用以下代码替换您的代码:

$res = ldap_get_entries($connect, $result);

for ($i=0; $i < $res["count"]; $i++) {
$result2=ldap_list($connect, "OU=".$res[$i]["ou"][0].",OU=PROFS,".$base_dnref, "(cn=*)");
$res2 = ldap_get_entries($connect, $result2);
        for($j=0;$j<$res2["count"];$j++){
                $NOM = $res2[$j]["cn"][0];//Store value into variable for further use...
            $insert=$db->query("INSERT INTO PROFESSEURS(NOM) VALUES ('".$NOM."')");
            $insert->fetch();
        }
}

$result=ldap_list($connect, "OU=ELEVES,".$base_dnref, "(ou=*)");

$res = ldap_get_entries($connect, $result);

for ($z=0; $z < $res["count"]; $z++) {
        $NUMERO = strval($res[$z]["ou"][0]);//Store value into variable for further use...
        $insert=$db->query("INSERT INTO CLASSE(NUMERO) VALUES ('".$NUMERO."')");
        $insert->fetch();

        $result2=ldap_list($connect, "OU=".$res[$z]["ou"][0].",OU=ELEVES,".$base_dnref, "(cn=*)");
        $res2 = ldap_get_entries($connect, $result2);

        for($y=0;$y<$res2["count"];$y++){
                $NOM = $res2[$y]["cn"][0];//Store value into variable for further use...
            $insert=$db->query("INSERT INTO ELEVE(NOM) VALUES ('".$res2[$y]["cn"][0]."')");


            $insert->fetch();

        }
}

我怀疑的地方做了一些细微的改动。 我建议使用PDO语句,因为旧语句现在已折旧。

如果您仍然遇到错误,请告诉我们,我们可以对其进行深入研究以解决该问题。

谢谢!

我解决了问题。 它来自查询的语法。 我替换:

$insert=$db->query("INSERT INTO ELEVE(NOM) VALUES ('".$res2[$y]["cn"][0]."')"); $insert->fetch();

通过: $insert=$db->exec('INSERT INTO ELEVE(NOM) VALUES ("'.$res2[$y]["cn"][0].'")');

这么多时间...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM