服务热线 400-660-8066

天津网站建设
首页 站内资讯

天津网站建设

站内资讯
天津网站建设 / 站内资讯 / 行业资讯 / 正文

网站建设之mysql防止sql注入

来源: All文章
发布时间:2023-05-05 15:08:55

  在网站建设的过程中,随着时间的积累,数据库的数据量越来越大,可以说,一个网站最重要的部分就是数据,一旦数据泄漏,会对公司造成难以想像的影响,所以数据的安全行至关重要。任何一个网站都有一个后台,方便对整个网站进行管理。后台往往有一个登录系统,这个登录系统,就很有可能通过一些方法直接验证通过从而进入你的后台,导致我们网站数据泄漏。今天就给大家介绍一些方法,防止这种情况发生。具体操作如下:

  首先我们来看产生结果的原因。

  当一个变量从表单传入到php,需要查询mysql的话,需要进行处理。

  举例:

  $unsafe_variable=$_POST['user_input'];

  mysqli_query(INSERTINTOtable(column)VALUES('.$unsafe_variable.'));

  用户可以输入诸如:value');DROPTABLEtable;,SQL语句就变成这样了:

  INSERTINTOtable(column)VALUES('value');DROPTABLEtable;')

  执行的结果就是table表被删掉了。

  这是一种常见的sql注入方法,那么在程序中,应该怎样预防呢?

  方法一:mysql_real_escape_string()

  由于addslashes()不检测字符集,所以有宽字节注入风险,所以php中添加了这个函数。

  这个函数本来是mysql的扩展,但是由于存在宽字节的问题,php基于mysql的扩展开发了此函数。

  mysql_real_escape_chars()是mysql_escape_chars()的替代用法。

  与addslashes()相比,不仅会将'\NOL(ascii的0)转义,还会把\r\n进行转义。同时会检测数据编码。

  按php官方的描述,此函数可以安全的用于mysql。

  方法二:预处理查询(PreparedStatements)

  a.先预发送一个sql模板过去

  b.再向mysql发送需要查询的参数

  就好像填空题一样,不管参数怎么注入,mysql都能知道这是变量,不会做语义解析,起到防注入的效果,这是在mysql中完成的。

  A.使用mysqli:prepare()实现

  $mysqli=newmysqli(example.com,user,password,database);

  $stmt=$mysqliprepare(SELECTid,labelFROMtestWHEREid=?);

  $stmtbind_param(1,$city);

  $stmtexecute();

  $res=$stmtget_result();

  $row=$resfetch_assoc();

  B.使用pdo实现

  pdo是一个php官方推荐的数据库抽象层,提供了很多实用的工具。

  使用pdo的预处理参数化查询可以有效防止sql注入。

  使用方法跟上面差不多,区别在于pdo提供了更多样的方法。

  使用这个pdo$stmt对象进行查询后,会被结果集覆盖,类型是一个二维数组。

  方法三:html输出与防止xss注入

  特殊字符输出

  比如'有着特殊的意义,如果直接写到html中输出,会引起dom格式的错乱,那么就需要用到特殊的输出方法。

  最后,希望可以帮到大家。

* 文章来源于网络,如有侵权,请联系客服删除处理。
在线 咨询

添加动力小姐姐微信

微信 咨询

电话咨询

400-660-8066

我们联系您

电话 咨询
微信扫码关注动力小姐姐 X
qr