预防数据库注入攻击方法(Mysql)

导语:近年来数据库注入漏洞出现率是很高的,owasp排名也在前10当中。大多数都是由于开发人员缺乏安全意识造成了注入漏洞。学习信息安全技术,不仅要学会漏洞利用,也需要我们有修补漏洞的能力,来提高应用的安全性。常用来预防数据库注入的方案大致有本文中的三种。

 

一、预处理语句及参数绑定

  预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。

  预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。

  预处理语句的工作原理如下:

    1.预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:

    

    2.数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。

 

    3.执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。

 

    下面放一个预编译参数绑定的demo

    

 

 

 

  

 

二、存储过程

  存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

  存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

  存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

  

  存储过程的创建和调用

  存储过程就是具有名字的一段代码,用来完成一个特定的功能。

  创建的存储过程保存在数据库的数据字典中。

  

  存储过程的应用参考:https://www.runoob.com/w3cnote/mysql-stored-procedure.html

  概论来源:https://www.runoob.com/w3cnote/mysql-stored-procedure.html

 

 

 

三、过滤用户输入

  关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据。在采取措施确保安全之前,来自任何其他来源(比如 GET 变量、表单 POST、数据库、配置文件、会话变量或 cookie)的任何数据都是不可信任的。此时需要我们取控制外部的输入,过滤其中不合法、有危害的内容。

  

  1,使用PHP 函数对输入内容过滤。如

    mysql_real_escape_string() 这个函数会对一些例如单引号、双引号、反斜杠等特殊字符添加一个反斜杠以确保在查询这些数据之前,用户提供的输入是干净的

    addslashes() 这个函数的原理跟mysql_real_escape_string()相似。但是当在php.ini文件中,“magic_quotes_gpc“的值是“on”的时候,就不要使用这个函数。magic_quotes_gpc 的默认值是on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。你可以使用get_magic_quotes_gpc()函数来确定它是否开启。

  

  2,使用正则表达式过滤输入。

 

  3,采用白名单机制,只允许指定的输入内容。

 

posted @ 2020-03-25 21:47  1mg0  阅读(542)  评论(0编辑  收藏  举报