`
javasee
  • 浏览: 960563 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

sql注入攻击的一个解决办法

阅读更多

虽然是设计高性能分布式系统,但是系统的安全漏洞还是应该尽量避免。前几天,项目当中遇到了sql注入攻击风险,感觉很是头疼,因为向几个黑客朋友请教的结果是没有办法根治,FT。也就是说只要黑客想废掉后台数据库,只要他有决心,就一定能做到,还是做热备比较可靠,其他办法只是能预防简单的攻击。很多符号如果在字符串中,都会有潜在的威胁。例如:

安全sql: select * from table where username = 'netchecking' and password = '123''

危险sql:select * from table where username = 'netchecking' and password = '123';delete * from table;''

把pasword赋值为:123;delete * from table

这样,数据库就被废了。


我在这里使用了一个简单的比较危险字符的方法,全部代码如下(还没有来的急详细测试,暂时叫第一版吧,以后等我完善以后,再给出源代码):

//算法为,先把字符串当中的危险字符变成不可见字符存储,然后再把它读取出来以后,转换成危险字符。

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>

#define DICNUM 9
char SOURCEDIC[] = {')','(','!','@','#','$','%','^','&'};
int CONVERTDIC[] = {128,129,130,131,132,133,134,135,136};


static int checkASC(char p)
{
int i = 0;
for (i=0;i<DICNUM;i++)
{
if (p==(char)CONVERTDIC[i])
{
return i;
}
}

return -1;
}

static int checkSource(char p)
{
int i = 0;
char * op = SOURCEDIC;
for (i=0;i<DICNUM;i++)
{
if (p==(*op))
return i;
op++;
}

return -1;
}

static int convertASC(char* p,int index)
{
*p = SOURCEDIC[index];
return 0x0;
}

static int convertSource(char* p,int index)
{
*p = (char)CONVERTDIC[index];
return 0x0;
}


static int replaceSource(char * buffer,char * result)
{
char * p = NULL;
p = buffer;
int res = 0;
int len = 0;
while(1)
{
res = checkASC(*p);
if (res >= 0x0)
convertASC(p,res);
result[len] = *p;
p++;
len++;
if (len == strlen(buffer)) break;
}
return 0x0;
}

static int replaceASC(char * buffer,char * result)
{
char * p = NULL;
p = buffer;
int res = 0;
int len = 0;
while(1)
{
res = checkSource(*p);
if (res >= 0x0)
convertSource(p,res);
result[len] = *p;
p++;
len++;
if (len == strlen(buffer)) break;
}
return 0x0;
}


int main()
{
char buffer[] = "12ws(((we";
printf("buffer = %s\n",buffer);

char result[254] = {0x0};
memset(result,0x0,254);
replaceASC(buffer,result);

printf("result = %s\n",result);

char res[254] = {0x0};

replaceSource(result,res);

printf("res = %s\n",res);
return 0x0;
}

希望能跟高手们交流sql injection预防技术。

分享到:
评论

相关推荐

    SQL注入攻击与防范研究.pdf

    1. SQL注入攻击的定义和原理:SQL注入是一种常见的网络攻击技术,攻击者通过在Web应用程序的输入字段中插入恶意的SQL代码片段,从而控制或访问后端数据库。攻击者利用Web系统脚本语言处理用户输入时的缺陷,将用户...

    4、SQL注入漏洞pdf资料

    例如,一个Web应用程序使用SQL语句来查询用户信息,但是攻击者可以使用SQL注入来获得数据库中的敏感信息,例如: ```sql SELECT * from users WHERE username='' UNION SELECT DATABASE() # and ....; ``` 六、SQL...

    Nginx中防止SQL注入攻击的相关配置介绍

    防止sql注入最好的办法是对于提交后台的所有数据都进行过滤转义。 对于简单的情况,比如包含单引号’ , 分号;, &lt;, &gt;, 等字符可通过rewrite直接重订向到404页面来避免。 用rewrite有个前提需要知道,一般用rewrite...

    SQL注入漏洞演示源代码

    通过研究这个源代码演示,我们可以亲手实践这些防御策略,加深理解并提高应对SQL注入攻击的能力。同时,这也提醒我们,在开发过程中,时刻关注代码安全性,避免引入此类漏洞,是每个开发者应有的责任。

    SQL INJECTION注入之经典教程

    4. Web应用框架中的SQL注入:特定Web框架如Spring、Django等可能存在的注入漏洞及其解决办法。 5. 云环境下的SQL注入:云数据库的特殊性带来的新挑战,以及如何在云环境中确保SQL安全性。 6. 零日攻击和未知漏洞:...

    SQL Server中单引号的两种处理技巧

    这种方法称为参数化查询,可以防止SQL注入攻击,并且通常执行效率较高。 - 当创建一个ADODB.Command对象时,可以定义参数并将其值设置为包含单引号的字符串。Command对象会自动处理这些参数,确保它们被正确地插入...

    SQL中in参数化的用法

    另一个解决方案是想办法为 in 的每个数据添加一个 @ parameter: ```csharp using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand comm = new SqlCommand(); comm....

    VB.NET,ASP.NET,SQL数据库实际应用中的典型问题及解决办法

    - **参数化查询**:防止SQL注入攻击,使用参数化命令(`SqlCommand.Parameters`)传递用户输入。 - **数据绑定**:ASP.NET控件如GridView、Repeater可直接绑定到数据源,简化数据展示。 5. **安全性问题** - **XSS...

    Teach Yourself SQL in 21 Days

    - **安全性考虑**:避免SQL注入攻击。 #### 第三周概览 **Day15:优化SQL语句以提高性能** - **索引优化**:合理选择索引。 - **查询优化**:减少不必要的数据加载。 - **分区**:将大数据表拆分成较小的部分。 **...

    WEB前端常见受攻击方式及解决办法总结

    【WEB前端常见受攻击方式及解决办法】 WEB前端的安全问题不容忽视,因为它直接影响到用户的个人信息安全和网站的正常运行。本文主要关注四种常见的攻击方式及其防范措施:SQL注入、跨站脚本攻击(XSS)、跨站请求...

    Web开发中常见的安全缺陷及解决办法[收集].pdf

    本篇文章主要探讨了两个关键知识点:一是不能盲目信任用户输入,二是五种常见的ASP.NET安全缺陷及其解决办法。 首先,我们了解为什么不能盲目相信用户输入。Web应用程序常常依赖用户提供的数据来执行各种操作,如...

    sql无效字符 执行sql语句报错解决方案

    这里我们看到,预编译语句(PreparedStatement)的一个主要优点是它可以防止SQL注入攻击,因为它允许我们将变量安全地插入到SQL语句中,而不是直接拼接字符串。然而,这也意味着我们在构建SQL语句时必须格外小心,...

    JDBC:数据库操作中的日期精度丢失解决办法

    这样可以防止由于字符串格式化造成的精度丢失,同时还能防止SQL注入攻击。 3. 配置JDBC驱动:某些JDBC驱动可能有特定的配置选项来控制日期时间的处理方式。查阅相关驱动的文档,寻找是否有关于日期精度的设置。 4....

    网站被挂马的解决办法

    ### 网站被挂马的解决办法:Mdcsoft-ips软件的应用及特性解析 在互联网时代,网站安全已成为不容忽视的重要议题。网站被挂马不仅会损害网站的正常运营,还会对用户的个人信息安全构成严重威胁。面对这类安全挑战,...

    web开发常见安全漏洞解决办法

    SQL注入漏洞 跨站脚本攻击漏洞 IIS短文件/文件夹漏洞 系统敏感信息泄露

    基于C 的关系代数产生的安全SQL查询.pdf

    总之,文章提出了一个在C++编译期间通过使用关系代数对SQL查询语句进行检查的机制,这不仅可以提高SQL查询的正确性,还可以预防SQL注入等安全风险。这种方法的意义在于它能够将编译时检查的范围从高级语言扩展到...

    Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)

    然而,为了防止SQL注入攻击,我们通常会采用参数绑定的方式来构建查询语句,而不是直接将变量拼接到SQL字符串中。但在使用LIKE操作符和参数绑定时,可能会遇到一些问题。本文将详细介绍如何解决在Android的SQLite...

    源碼安全修正PDF說明

    ` 这样的写法非常危险,因为如果用户提交的数据中包含特殊字符或者SQL关键字,就可能导致SQL注入攻击。 - **解决办法**: 使用参数化查询(Prepared Statement),可以有效防止SQL注入。例如: ```java ...

    Mybatis现学现用

    以最短的时间学会Mybatis,并使用到项目中,包括搜集的很多资料;很全很全:并且有项目实例 例如:mybatis中的#和$的区别?...这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

    数据库被挂马的解决办法

    数据库被挂马,一般指的是攻击者利用某种手段(如SQL注入等)向数据库中插入恶意脚本或木马程序,这些脚本或程序会在特定条件下触发,从而达到攻击目的。 #### 二、检测与清除木马 1. **备份数据库**:在进行任何...

Global site tag (gtag.js) - Google Analytics