帝国cms防注入处理 addslashes dgdb_tosave

时间:2020-06-01 11:41
帝国cms防注入处理方式很让人无语,sql语句接近原生,无法从底层过滤。

他使用一堆的函数来处理防注入的问题。

帝国cms插入数据需要进行两次addslashes处理(所以显示内容时候需要stripslashes一次),dgdb_tosave 函数 其实就是使用了两次 addslashes函数。保存到数据库中的过程中mysql会去掉一次addslashes,保存到数据库中的结果就相当于addslashes了一次。之所以进行两次addslashes我想可能是为了怕在取出数据作为查询时忘记加addslashes从而造成二次注入。如果进行两次那么查询到的数据相当于已经进行了一次addslashes。

如果外部用户输入的字段查询时,需要使用两次 addslashes 函数来过滤数据再次和数据库对比。
如果从数据库中查询的结果再次查询,则只需要把结果 addslashes一次即可查询到正确结果(因为数据已经被addslashes了一次)

示例:
$s="sss'";
$s1=addslashes(addslashes("sss'"));
$que= $empire->query("update {$dbtbpre}ecms_article set title='$s1' where id=18");
$r=$empire->fetch1("select * from {$dbtbpre}ecms_article where id='18'");
$r=$empire->fetch1("select * from {$dbtbpre}ecms_article where title='".$r[title]."'");
print_r($r);