所以我是一个有点经验丰富的PHP开发人员,自2007年以来一直在做“该死的事”.但是,在保护我的应用程序方面,我仍然相对较差.在我不知道的一切方式中,我知道我可以而且应该.
我已经拿起了Securing PHP Web Applications并正在阅读我的方式来测试一路上的东西.我对与数据库查询有关的一般SO组有一些问题(主要是在MysqL下):
创建将数据放入数据库的应用程序时,MysqL_real_escape_string和输入数据的一般检查(is_numeric等)是否足够?那些与sql注入不同的其他类型的攻击呢?
有人可以解释存储过程和准备好的语句,而不是 – 你制作它们并调用它们.我想知道它们是如何工作的,幕后的验证是什么.
我在PHP4绑定环境中工作,PHP5暂时不是一个选项.有没有其他人曾经在这个位置,你做了什么来保护你的应用程序,而所有酷孩子都在使用这个甜蜜的新MysqLi界面?
我的建议:
> ditch MysqLi支持PDO(使用MysqL驱动程序)
>使用PDO paremeterized准备好的陈述
然后你可以这样做:
$pdo_obj = new PDO( 'MysqL:server=localhost; dbname=mydatabase',$dbusername,$dbpassword ); $sql = 'SELECT column FROM table WHERE condition=:condition'; $params = array( ':condition' => 1 ); $statement = $pdo_obj->prepare( $sql,array( PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY ) ); $statement->execute( $params ); $result = $statement->fetchAll( PDO::FETCH_ASSOC );
优点:
>不再需要手动转发,因为PDO为您完成了所有工作!
>突然切换数据库后端相对容易.
缺点:
>我想不出任何.