虽然是设计高性能分布式系统,但是系统的安全漏洞还是应该尽量避免。前几天,项目当中遇到了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预防技术。
分享到:
相关推荐
1. SQL注入攻击的定义和原理:SQL注入是一种常见的网络攻击技术,攻击者通过在Web应用程序的输入字段中插入恶意的SQL代码片段,从而控制或访问后端数据库。攻击者利用Web系统脚本语言处理用户输入时的缺陷,将用户...
例如,一个Web应用程序使用SQL语句来查询用户信息,但是攻击者可以使用SQL注入来获得数据库中的敏感信息,例如: ```sql SELECT * from users WHERE username='' UNION SELECT DATABASE() # and ....; ``` 六、SQL...
防止sql注入最好的办法是对于提交后台的所有数据都进行过滤转义。 对于简单的情况,比如包含单引号’ , 分号;, <, >, 等字符可通过rewrite直接重订向到404页面来避免。 用rewrite有个前提需要知道,一般用rewrite...
通过研究这个源代码演示,我们可以亲手实践这些防御策略,加深理解并提高应对SQL注入攻击的能力。同时,这也提醒我们,在开发过程中,时刻关注代码安全性,避免引入此类漏洞,是每个开发者应有的责任。
4. Web应用框架中的SQL注入:特定Web框架如Spring、Django等可能存在的注入漏洞及其解决办法。 5. 云环境下的SQL注入:云数据库的特殊性带来的新挑战,以及如何在云环境中确保SQL安全性。 6. 零日攻击和未知漏洞:...
这种方法称为参数化查询,可以防止SQL注入攻击,并且通常执行效率较高。 - 当创建一个ADODB.Command对象时,可以定义参数并将其值设置为包含单引号的字符串。Command对象会自动处理这些参数,确保它们被正确地插入...
另一个解决方案是想办法为 in 的每个数据添加一个 @ parameter: ```csharp using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand comm = new SqlCommand(); comm....
- **参数化查询**:防止SQL注入攻击,使用参数化命令(`SqlCommand.Parameters`)传递用户输入。 - **数据绑定**:ASP.NET控件如GridView、Repeater可直接绑定到数据源,简化数据展示。 5. **安全性问题** - **XSS...
- **安全性考虑**:避免SQL注入攻击。 #### 第三周概览 **Day15:优化SQL语句以提高性能** - **索引优化**:合理选择索引。 - **查询优化**:减少不必要的数据加载。 - **分区**:将大数据表拆分成较小的部分。 **...
【WEB前端常见受攻击方式及解决办法】 WEB前端的安全问题不容忽视,因为它直接影响到用户的个人信息安全和网站的正常运行。本文主要关注四种常见的攻击方式及其防范措施:SQL注入、跨站脚本攻击(XSS)、跨站请求...
本篇文章主要探讨了两个关键知识点:一是不能盲目信任用户输入,二是五种常见的ASP.NET安全缺陷及其解决办法。 首先,我们了解为什么不能盲目相信用户输入。Web应用程序常常依赖用户提供的数据来执行各种操作,如...
这里我们看到,预编译语句(PreparedStatement)的一个主要优点是它可以防止SQL注入攻击,因为它允许我们将变量安全地插入到SQL语句中,而不是直接拼接字符串。然而,这也意味着我们在构建SQL语句时必须格外小心,...
这样可以防止由于字符串格式化造成的精度丢失,同时还能防止SQL注入攻击。 3. 配置JDBC驱动:某些JDBC驱动可能有特定的配置选项来控制日期时间的处理方式。查阅相关驱动的文档,寻找是否有关于日期精度的设置。 4....
### 网站被挂马的解决办法:Mdcsoft-ips软件的应用及特性解析 在互联网时代,网站安全已成为不容忽视的重要议题。网站被挂马不仅会损害网站的正常运营,还会对用户的个人信息安全构成严重威胁。面对这类安全挑战,...
SQL注入漏洞 跨站脚本攻击漏洞 IIS短文件/文件夹漏洞 系统敏感信息泄露
总之,文章提出了一个在C++编译期间通过使用关系代数对SQL查询语句进行检查的机制,这不仅可以提高SQL查询的正确性,还可以预防SQL注入等安全风险。这种方法的意义在于它能够将编译时检查的范围从高级语言扩展到...
然而,为了防止SQL注入攻击,我们通常会采用参数绑定的方式来构建查询语句,而不是直接将变量拼接到SQL字符串中。但在使用LIKE操作符和参数绑定时,可能会遇到一些问题。本文将详细介绍如何解决在Android的SQLite...
` 这样的写法非常危险,因为如果用户提交的数据中包含特殊字符或者SQL关键字,就可能导致SQL注入攻击。 - **解决办法**: 使用参数化查询(Prepared Statement),可以有效防止SQL注入。例如: ```java ...
以最短的时间学会Mybatis,并使用到项目中,包括搜集的很多资料;很全很全:并且有项目实例 例如:mybatis中的#和$的区别?...这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。
数据库被挂马,一般指的是攻击者利用某种手段(如SQL注入等)向数据库中插入恶意脚本或木马程序,这些脚本或程序会在特定条件下触发,从而达到攻击目的。 #### 二、检测与清除木马 1. **备份数据库**:在进行任何...