问题列表
- SQL 注入
主要就是一些数据没有经过严格的验证,然后直接拼接 SQL 去查询。导致漏洞产生,注入者可提交任何类型的数据,比如 " and 1= 1 or " 等不安全的数据
- 文件系统安全
PHP可以直接访问文件系统、执行Shell命令,这给程序开发提供了强大的支持的同时也可能会带来危险。同样,恰当的过滤和编码可以避免危险。
- 命令行注入
PHP提供了exec(), system(),passthru(),shell_exec()等函数,以及` (反引号)运算符。这些函数可以直接调用命令行系统指令,例如system('dir c:'); 可以显示C盘符下的目录内容, system("ls -al|cat/etc/passwd");可以获得passwd的内容。假如攻击者能将这些命令注入你的代码并运行,将给系统带来巨大的危害。
- XSS
XSS 又叫 CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往 Web 页面里插入恶意 html 代码,当用户浏览该页之时,嵌入其中 Web 里面的 html 代码会被执行,从而达到恶意攻击用户的特殊目的。
- CSRF
CSRF 是跨站请求伪造的缩写,它是攻击者通过一些技术手段欺骗用户去访问曾经认证过的网站并运行一些操作。
- 在生产环境中不正确的错误报告暴露敏感数据
如果你不小心,可能会在生产环境中因为不正确的错误报告泄露了敏感信息,例如:文件夹结构、数据库结构、连接信息与用户信息。
PHP预编译工作原理
预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?) 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。
执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
相比于直接执行SQL语句,预处理语句有两个主要优点:
预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。