专注于 web 应用开发

简单的 php 防注入、防跨站 函数

2017-06-04 19:15

function fn_safe($str_string) {
    //直接剔除
    $_arr_dangerChars = array(
        ",", ";", "$", "@", "+", "", "", "", ",", "(", ")", PHP_EOL //特殊字符
    );
 
    //正则剔除
    $_arr_dangerRegs = array(
        /* -------- 跨站 --------*/
 
        //html 标签
        "/<(script,frame,iframe,bgsound,link,object,applet,embed,blink,style,layer,ilayer,base,meta)s+S*>/i",
 
        //html 属性
        "/on(afterprint,beforeprint,beforeunload,error,haschange,load,message,offline,online,pagehide,pageshow,popstate,redo,resize,storage,undo,unload,blur,change,contextmenu,focus,formchange,forminput,input,invalid,reset,select,submit,keydown,keypress,keyup,click,dblclick,drag,dragend,dragenter,dragleave,dragover,dragstart,drop,mousedown,mousemove,mouseout,mouseover,mouseup,mousewheel,scroll,abort,canplay,canplaythrough,durationchange,emptied,ended,error,loadeddata,loadedmetadata,loadstart,pause,play,playing,progress,ratechange,readystatechange,seeked,seeking,stalled,suspend,timeupdate,volumechange,waiting)s*=s*(",')?S*(",')?/i",
 
        //html 属性包含脚本
        "/w+s*=s*(",')?(java,vb)script:S*(",')?/i",
 
        //js 对象
        "/(document,location)s*.s*S*/i",
 
        //js 函数
        "/(eval,alert,prompt,msgbox)s*(.*)/i",
 
        //css
        "/expressions*:s*S*/i",
 
        /* -------- sql 注入 --------*/
 
        //显示 数据库 , 表 , 索引 , 字段
        "/shows+(databases,tables,index,columns)/i",
 
        //创建 数据库 , 表 , 索引 , 视图 , 存储过程 , 存储过程
        "/creates+(database,table,(uniques+)?index,view,procedure,proc)/i",
 
        //更新 数据库 , 表
        "/alters+(database,table)/i",
 
        //丢弃 数据库 , 表 , 索引 , 视图 , 字段
        "/drops+(database,table,index,view,column)/i",
 
        //备份 数据库 , 日志
        "/backups+(database,log)/i",
 
        //初始化 表
        "/truncates+table/i",
 
        //替换 视图
        "/replaces+view/i",
 
        //创建 , 更改 字段
        "/(add,change)s+column/i",
 
        //选择 , 更新 , 删除 记录
        "/(select,update,delete)s+S*s+from/i",
 
        //插入 记录 , 选择到文件
        "/inserts+into/i",
 
        //sql 函数
        "/load_files*(.*)/i",
 
        //sql 其他
        "/(outfile,infile)s+(",')?S*(",')/i",
    );
 
    $_str_return = $str_string;
    //$_str_return = urlencode($_str_return);
 
    foreach ($_arr_dangerChars as $_key=>$_value) {
        $_str_return = str_ireplace($_value, "", $_str_return);
    }
 
    foreach ($_arr_dangerRegs as $_key=>$_value) {
        $_str_return = preg_replace($_value, "", $_str_return);
    }
 
    $_str_return = htmlentities($_str_return, ENT_QUOTES, "UTF-8", true);
 
    return $_str_return;
}
 
 
  • Tags:

资助我们


baigo Studio 是一个纯公益组织,几乎没有资金来源,同时我们还必须承担一些费用,比如服务器租用等。旗下的软件均为开源项目,为了能让我们的项目能够继续发展,我们需要用户的帮助。