go防sql注入 | 青训营笔记

372 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天

什么是SQL注入

SQL注入是一种注入攻击手段,通过执行恶意SQL语句,然后在数据库查询中插入任意SQL代码,使攻击者完全控制Web应用程序背后的数据库服务器。攻击者可以利用SQL注入漏洞绕过应用程序身份验证,例如登录身份验证访问Web身份验证和授权页面;还可以绕过网页,直接搜索数据库的所有内容;您还可以恶意修改、删除和添加数据库内容。

防止SQl注入的想法和方法

  1. 永远不要相信用户输入。检查用户的输入,通过正则表达式或限制长度;转换单引号和双“-”等等。
  2. 不要使用动态组合SQL,可以使用参数化SQL或直接使用存储过程进行数据查询和访问。 3.不要使用具有管理员权限的数据库连接。使用单独的数据库连接,每个应用程序的权限有限。
  3. 不要直接存储机密信息,加密或散列密码和敏感信息。
  4. 应用程序异常信息应该提供尽可能少的提示。最好使用自定义错误信息来打包原始错误信息
  5. sql注入的检测方法一般是通过辅助软件或网站平台进行检测。软件一般使用sql注入检测工具jsky,网站平台有Eisi网站安全平台检测工具。MDCSOFT扫描等。MDCSOFT-IPS可以有效防御SQL注入和XSS攻击。 SQL注入攻击如此有害,那么如何防范呢?以下建议可能有助于防止SQL注入。

mybatis如何防止sql注入

MyBatis框架作为一个半自动的持久化层框架,它的SQL语句需要我们自己手工编写,这个时候当然需要防止SQL注入。实际上,MyBatis SQL是一个带有“输入+输出”的函数,类似于函数的结构,参考上面两个例子。其中parameterType为输入参数类型,resultType为输出参数类型。针对上述问题,如果我们想防止SQL注入,那么处理输入参数是有意义的。在上面的代码中,#的使用是SQL连接中输入参数的一部分。传递参数后,打印出执行的SQL语句,你会看到SQL是这样的: Select id, username, password, role from user where username=?和密码= ? 不管输入的参数是什么,打印出来的SQL如下所示。这是因为MyBatis启用了预编译功能。在执行SQL之前,上面的SQL被发送到数据库进行编译。要执行该命令,请使用已编译的SQL并替换占位符?就是这样。由于SQL注入只在编译过程中起作用,因此这种方法避免了SQL注入问题。