Essential PHP Security -PHP安全基础

第三章 数据库及SQL

Top  Previous  Next

                                                                  第三章 数据库及SQL

  PHP的作用常常是沟通各种数据源及用户的桥梁。事实上,有些人认为PHP更像是一个平台而不是一个编程语言。基于这些原因,PHP频繁用于与数据库的交流。

  PHP可以很好的胜任这个任务,其原因特别是由于它能与很多种数据库连接。下面列举了PHP支持的小部分数据库:

DB2

ODBC

SQLite

InterBase

Oracle

Sybase

MySQL

PostgreSQL

DBM

 

  与任何的远程数据存储方式相同,数据库本身也存在着一些风险。尽管数据库安全不是本书讨论的问题,但数据库安全是需要时刻注意的,特别是关于如何对待从数据库读取作为输入的数据的问题。

  正如第一章所讨论的,所有输入必需要进行过滤,同时所有的输出必须要转义。当处理数据库时,意味着所有来自数据库的数据要过滤,所有写入数据库的数据要进行转义。

 

小提示

  常犯的错误是忘记了SELECT语句本身是向数据库传送的数据。尽管该语句的目的是取得数据,但语句本身则是输出。

 

  很多PHP开发人员不会去过滤来自数据库的数据,他们认为数据库内保存的是已过滤的数据。虽然这种做法的安全风险是很小的,但是这不是最好的做法,同时我也不推荐这样做。这种做法是基于对数据库安全的绝对信任,但同时违反了深度防范的原则。如果恶意数据由于某些原因被注入了数据库,如果你有过滤机制的话,就能发现并抓住它。请记住,冗余的安全措施是有价值的,这就是一个很好的例子。

  本章包括了其它几个需要关心的主题,包括访问权限暴露及SQL注入。SQL注入是需要特别关注的,这是因为在流行的PHP应用中频繁发现了SQL注入漏洞。