﻿// JScript 文件

var filters=new Array(7);

function fn_filter()
{
    filters[0]="'";
    filters[1]="<script>";
    filters[2]="insert";
    filters[3]="update";
    filters[4]="select";
    filters[5]="delete";
    filters[6]="--";
    //filters[7]="*";
}

function fn_securityvalidation(Scope,validationtype)
{   
    //form所包含的所有元素对象集合
    var elems=Scope.elements;
    //form所包含的所有元素的个数
    var elems_cnt=Scope.elements.length;
    //验证类型
    var val_type=validationtype;  
    
    //返回验证结果标志变量[Flag]
    var validationresult=true;
    
    fn_filter();      
     
    //alert("filters.length--"+filters.length);
    //alert("elems_cnt--"+elems_cnt);
    //alert("val_type--"+val_type);
    
    for(var i=0;i<elems_cnt;i++)
    {
         if(elems[i].getAttribute("type")==val_type)
         {
            //alert("1"+elems[i].value+"1");
            if(elems[i].value!="")
            {                
                for(var j=0;j<filters.length;j++)
                {                  
                    //alert("value--"+elems[i].value);
                    //alert(elems[i].value.match(filters[i]));
                    if (elems[i].value.match(filters[j])!=null)            
                    {   
                        
                        //---------------------------------------------------------------------------------------------------------               
                        //第一种方法：根据在目标字符串中查找指定的字符串内容，可用目标字符串长度减去指定字符串长度的值再加1的方法来
                        //通过用目标字符串的长度除以要检测的指定字符串的长度并取整，因为每替换掉一次出现的指定字符串，目标字符串的总
                        //长度就会减少“指定字符串”的长度，也就计算目标字符串中到底包含有多少个指定字符串
                        var count=Math.floor(elems[i].value.length/filters[j].length);                                     
                        for(var cnt=0;cnt<count;cnt++)
                        {
                            elems[i].value=elems[i].value.replace(filters[j],"");                            
                        }             
                        elems[i].style.color="#0000FF";
                        //[用户体验中上，系统消耗相对比较小]
                        //---------------------------------------------------------------------------------------------------------               
                        
                        
                        //---------------------------------------------------------------------------------------------------------               
                        //第二种方法：根据在目标字符串中查找指定的字符串内容，可用目标字符串长度减去指定字符串长度的值再加1的方法来
                        //确定目标字符串中有可能出现的指定字符串的次数，但它又不同于数学意义上的排列组合计算。
                        //比如在长度为5的目标字符串中查找长度为1、2、3、4的指定字符串，则有如下结果：
                        
                        //目标字符串的长度-指定字符串的长度-可能出现的次数 [公式]
                        //5-1-5 [5-1+1]
                        //5-2-4 [5-2+1]
                        //5-3-3 [5-3+1]
                        //5-4-2 [5-4+1]                        
                                                
                        //目标字符串长度
                        //var strtargetlength=elems[i].value.length;
                        //指定字符串长度
                        //var strspeciallength=filters[j].length;
                        //指定字符串最大出现次数
                        //var count=strtargetlength-strspeciallength;                                          
                        //由于javascript中的replace函数和c#中的不同，它只能对目标字符串的第一个匹配项进行替换处理，
                        //所以必须通过计算“指定字符串最大出现次数”来进行迭代处理。
                        //for(var i=0;i<count;i++)
                        //{
                        //    elems[i].value=elems[i].value.replace(filters[j],"");
                        //}
                        //[用户体验中，系统消耗相对比较大]
                        //---------------------------------------------------------------------------------------------------------
                        
                        
                        //---------------------------------------------------------------------------------------------------------
                        //第三种方法：如果包含危险字符，则将包含危险字符的内容整个标红
                        //[用户体验差，用户不能知晓那个才是危险字符]
                        //elems[i].style.color="#FF0000";                        
                        //---------------------------------------------------------------------------------------------------------
                        
                        
                        //---------------------------------------------------------------------------------------------------------
                        //第四种方法：如果包含危险字符，则将包含危险字符的内容整个标红
                        //最好能查找出目标之符串中所有匹配的指定字符串的位置，并对其进行刷红显示
                        //[用户体验较高，目前还没有进行技术验证]
                        //var strhighlight="<span style=\"color:Red\">"+filters[j]+"</span>";
                        //var str=elems[i].value.replace(filters[j],strhighlight);           
                        //---------------------------------------------------------------------------------------------------------
                        
                        validationresult=false;                      
                    } 
                }    
            }                        
         }       
     }
     return validationresult;
}

function fn_checksingleitem(item)
{
    var validationresult=true;
    
    fn_filter();      
    
  
            //alert("1"+elems[i].value+"1");
            if(item.value!="")
            {                
                for(var j=0;j<filters.length;j++)
                {                  
                    //alert("value--"+elems[i].value);
                    //alert(elems[i].value.match(filters[i]));
                    if (item.value.match(filters[j])!=null)            
                    {             
                        var count=Math.floor(item.value.length/filters[j].length);                                     
                        for(var cnt=0;cnt<count;cnt++)
                        {
                            item.value=item.value.replace(filters[j],"");                            
                        }             
                        item.style.color="#0000FF";
                      
                        
                        validationresult=false;                      
                    } 
                }    
            }                        
      
     return validationresult;
}