在将值添加到查询中以防止 sql 注入之前,我通常使用自己的函数来清理输入。我也使用梨 DB_DataObject。
我在这里读到 DB_DataObject 会清理输入本身。这是真的?我可以将未清理的输入分配给 DB_DataObject 对象吗?(mysql_real_escape_string 怎么样?,我将它与 DB_DataObject 结合使用时出现错误,因为尚未建立与 DB 的连接)
我也很好奇其他人如何清理那里的输入。有最佳实践吗?
DB_DataObject 清理通过“->set*”方法传递的输入,例如
假设 User 是 DB_DataObject,以下都是安全的:
$user = new User;
$user->firstName = $_REQUEST['first'];
$user->setFirstName($_REQUEST['first'];
$user->setFrom($_REQUEST);
您实际传递的 SQL 片段中的任何方法都是不安全的,例如:
$user->selectAs($_REQUEST['col']. ', first as name');
$user->whereAdd("first=$_REQUEST['first]");
希望能澄清一些事情......