程序员的疏忽就可能导致你的账号被盗哦

SQL 注入攻击

SQL 注入攻击,这个是最常聊到的话题,使用过 Java 的开发人员,第一个反应就是一定要使用预编译的 PrepareStatement

什么是 SQL 注入攻击

攻击者在 HTTP 请求中注入恶意的 SQL 代码,服务器使用参数构建数据库 SQL 命令时,恶意 SQL 被一起构造,并在数据库中执行。


程序员的疏忽就可能导致你的账号被盗哦


用户登录,输入用户名 tom,密码 'or '1' = '1' ,如果此时使用参数构造的方式,就会出现

<code>select * from user where name = 'tom' and password = '' or '1'='1'
/<code>

不管用户名和密码是什么内容,使查询出来的用户列表不为空。这里的or就是或者的意思,只要查询条件满足一条即。

现在还会存在 SQL 注入攻击么

这个问题在使用了预编译的 PrepareStatement 后,安全性得到了很大的提高,但是真实情况下,很多人并不重视,还是会留下漏洞的。举个例子,看看,大家的代码中对 sql 中 in 操作,使用了预编译,还是仍然还是通过字符串拼接呢?

如何防范 SQL 注入攻击

使用预编译的 PrepareStatement 是必须的,但是一般我们会从两个方面同时入手:

  1. Web 端有效性检验。限制字符串输入的长度。
  2. 服务端不用拼接 SQL 字符串。使用预编译的 PrepareStatement。有效性检验。(为什么服务端还要做有效性检验?第一准则,外部都是不可信的,防止攻击者绕过 Web 端请求)过滤 SQL 需要的参数中的特殊字符。比如单引号、双引号。


分享到:


相關文章: