mysql的sql注入介绍

来源:互联网 发布:php优化方案 编辑:程序博客网 时间:2024/06/11 19:21

    SQL注入简介

        结构化查询语言(SQL)是一种用来和数据库交互的文本语言。SQL Injection就是利用数据库的外部接口将用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的,它的产生实际上由于程序对用户输入的数据没有进行严格的过滤,导致非法数据库查询语句的执行。
        比如说,服务端中用php写的sql语句,
    $sql = "SELECT * FROM user WHERE username='$_POST[username]' AND password='$_POST[password]'";
        模拟表单进行POST提交,url中的参数username=' or '1'='1' '&password=' or '1'='1' ';,会将查询表的所有数据查询出来。也可以在参数后面接#或者/*,将后面的查询条件过滤掉。
        对于Java的JSP开发,可以使用PrepareStatement+Bind-varibale防止SQL注入,另外从PHP5开始,mySqli中支持PrepareStatement,尽量不要使用拼接的SQL语句
        使用应用程序提供的转换函数,
        mySql C API: 使用mysql_real_escape_string() API调用
        mySql++:使用escape和quote修饰符
        PHP:使用mysql_real_escape_string()函数,从PHP5开始,可以使用扩展的mySqli,支持PrepareStatement
        Perl DBI:使用placeholders或者quote()方法
        Ruby DBI:使用placeholders或者quote()方法
        自己定义函数进行校验,
        整理数据使之变得有效,拒绝已知的非法输入,只接受已知的合法输入。
        可以采用正则表达式的方法,过滤掉已知的非法符号, 
        "'"、";"、,"="、"("、")"、"/*"、"*/"、"#"、"%"、"+"、">"、"<"、"--"、"["、"]",但这种黑名单式的防注入方式,总会被找到漏洞进行攻击,推荐使用prepare,动态绑定参数。
原创粉丝点击