一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

简单的js防止SQL注入的函数

时间:2016-04-18 编辑:简简单单 来源:一聚教程网

SQL注入攻击的总体思路:

发现SQL注入位置;判断服务器类型和后台数据库类型;确定可执行情况
对于有些攻击者而言,一般会采取sql注入法。下面我也谈一下自己关于sql注入法的感悟。

注入法:

从理论上说,认证网页中会有型如:
select * from admin where username=’XXX’ and password=’YYY’ 的语句,若在正式运行此句之前,如果没有进行必要的字符过滤,则很容易实施SQL注入。
如在用户名文本框内输入:abc’ or 1=1– 在密码框内输入:123 则SQL语句变成:
select * from admin where username=’abc’ or 1=1 and password=’123’ 不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

猜解法:

基本思路是:猜解所有数据库名称,猜出库中的每张表名,分析可能是存放用户名与密码的表名,猜出表中的每个字段名,猜出表中的每条记录内容。
还有一种方式可以获得你的数据库名和每张表的名。
就是通过在形如:http://www. .cn/news?id=10’的方式来通过报错获得你的数据库名和表名!

前端js防止注入解决办法:

1.URL地址防注入:

//过滤URL非法SQL字符
var sUrl=location.search.toLowerCase();
var sQuery=sUrl.substring(sUrl.indexOf("=")+1);
re=/select|update|delete|truncate|join|union|exec|insert|drop|count|'|"|;|>|<|%/i;
if(re.test(sQuery))
{
    alert("请勿输入非法字符");
    location.href=sUrl.replace(sQuery,"");
}

2.输入文本框防注入:

//防止SQL注入
function AntiSqlValid(oField )
{
    re= /select|update|delete|exec|count|'|"|=|;|>|<|%/i;
    if ( re.test(oField.value) )
    {
    //alert("请您不要在参数中输入特殊字符和SQL关键字!"); //注意中文乱码
    oField.value = ";
    oField.className="errInfo";
    oField.focus();
    return false;
}

在需要防注入的输入文本框添加如下方法

txtName.Attributes.Add("onblur", "AntiSqlValid(this)");//防止Sql脚本注入

后面服务器防sql注入

1.全站入口处检查get_magic_quotes_gpc()是否开启,如果没开启,则全站对request(包括get、post等,特别是get)进来的数据进行检查,出现add、select、update等字符时提示错误。

2.把错误提示给关了,error_reporting(E_ALL & ~E_NOTICE);// 不显示警告
ini_set(‘display_errors’,’Off’);
以防出现警告和错误提示时把网站的路径显示出来。

3.因为那网站没有做伪静态,出现了xxx.com/?id=数字的情况,也就是说存在SQL注入漏洞(盲注)的可能性,应对方法先判断get(id)进来的是否是数字,如果不是直接提示错误,如果是,则intval转换,再进行mysql_query(mysql_query好处是只进行一次查询后自动关闭)。

4.页面异常导致本地路径泄漏。设置出现异常错误时的跳转页面,尽量不出现空白页或500之类的错误页。每次查询都要判断假如无结果时的应对办法。

5.总是提示有漏洞:跨站脚本攻击(XSS)。按上面1、2、3步骤后还是提示有此漏洞,马上进行改正,字符串的话用htmlspecialchars更替html代码。

6.后台路径屏蔽搜索引擎,登录时先检查ID是否正确,如果正确,再MD5加密密码进行查询,2次sql查询加强安全。

热门栏目