[英]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.