文件修复

什么是SQL注入(SQLi)?如何预防?

简介:SQL注入(SQLi)是用于攻击数据库的常用技术之一。在本文中,我们将详细了解SQL注入技术以及如何防止数据库遭受SQL注入攻击。我们还将提到一个MySQL修复软件,它可以帮助修复和恢复数据库,如果它被损坏。

免费下载
免费下载
目录表 箭头

    SQL注入不仅可以发生在MySQL中,也可以发生在任何其他数据库中。这是一种常见的黑客攻击,在MySQL中非常流行,因为web上的几个公共数据库使用MySQL。

    基本上,黑客将恶意代码注入文本框中。例如;你在网上有一个注册表格。下面的代码将在一个表中插入注册数据:

    INSERT INTO users(用户名,姓氏,登录名,密码)

    价值观(“约翰”,“史密斯””、“jsmith”、“# sfASD my12”d ');

    然而,黑客可以在密码文本框中注入恶意代码:

    删除mytable表

    在上面的示例中,黑客试图添加恶意代码来删除名为mytable的表。

    因此,需要小心处理表单,特别是必须提交数据的输入表单。这是因为黑客可以访问你的密码或删除重要信息。

    如何防止SQL注入攻击?

    下面是一些建议,您可以遵循这些建议来避免SQL注入。

    限制用户权限

    经验法则是尽可能地限制权限。如果用户只需要在特定表中插入权限才能登录并提供个人信息,则可以只提供插入权限,而取消对其他表的选择权限。确保该用户没有系统表或系统功能的权限。只提供所需的最低权限。

    使用存储过程而不是普通查询

    创建和授予对特定存储过程的访问权限,而不是提供对执行SQL语句的访问权限,可以降低执行SQL注入的风险。

    应用程序中的文本框将填充存储过程中的一些输入变量。如果黑客试图注入恶意代码,这将是不可能的,因为变量将具有无效的值。

    下面的示例展示了如何在MySQL中生成存储过程。

    分隔符/ /
    CREATE PROCEDURE PROCEDURE(查询vname VARCHAR(55), vlastname VARCHAR(60), vlogin VARCHAR(30), vpassword VARCHAR(50))
    开始
    INSERT INTO users(用户名,姓氏,登录名,密码)
    VALUES (vname, vlastname, vlogin, vpassword);
    / /结束

    分隔符;

    过程名为proceduresample,它接收4个变量:

    • Vname
    • Vlastname
    • Vlogin
    • Vpassword

    在MySQL中,分隔符用于定义存储过程的开始和结束位置。

    一旦你有了自己的存储过程,你就可以调用它:

    CALL procedure ('John', 'Rambo', 'jrambo', 1354$%$$sword');

    这段代码将在用户的表中插入数据。如果黑客试图进行SQL注入,攻击将失败。

    下面的代码展示了它是如何工作的。

    调用proceduresample(“约翰”、“兰博”、“jrambo”,1354 $ % $ $剑’;删除表用户);

    现在,你可以尝试用下面的注入来删除表用户:

    删除表用户

    如果你尝试运行代码,你会得到一个类似于下面的错误消息:

    ERROR 1064(42000):你的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在第1行';drop table t1')'附近使用正确的语法

    这意味着注射会失败。

    用户界面中的验证器

    在向文本框中插入数据时,还可以通过在代码中添加验证器来避免SQL注入。下面的例子展示了一个验证器来避免文本框中出现奇怪的字符:

    private bool checkstrangecharters(字符串文本框)

    //避免的字符列表
    列表 disallowed = new List (){“;”,“@”,“*/”};

    //使用foreach来验证
    Foreach(字符串I不允许)

    如果(input.Contains(我))

    返回错误;
    }
    }

    返回true;
    }

    下面的示例展示了如何在PHP中验证它。

    validateInput($textbox) {
    //避免的字符列表
    $avoid = array(';', '@', '/*', '*/');

    //使用foreach来验证
    Foreach($避免为$a) {
    If (strpos($input, $a) !== false) {
    返回错误;
    }
    }

    返回true;
    }

    您也可以在JavaScript中执行相同的操作。

    公共boolean checkstrangecharters(字符串文本框){
    //避免的字符列表
    String[] avoid = {";", "@", "/*", "*/"};

    //使用for循环进行检查
    for(字符串a:避免){
    If (input.contains(a)) {
    返回错误;
    }
    }

    返回true;
    }

    如果数据库损坏了怎么办?

    有时,在应用SQL注入后,数据库会损坏。在这种情况下,您可以使用第三方MySQL修复工具,如Stellar repair for MySQL来修复损坏的数据库。该软件可以修复MySQL或MariaDB数据库。它可以在Windows环境或CentOS Red Hat和Ubuntu中使用。它允许您修复和恢复数据库。它还可以将数据保存为CSV、HTML或XLS (Excel)格式。

    结论

    以上,我们已经详细解释了SQL注入以及如何防止SQL注入攻击。可以通过使用带有变量的存储过程来防止SQL注入。另一种方法是添加代码来验证输入并检查一些奇怪的字符。

    如果数据库损坏,您可以使用MySQL的恒星修复修复数据库(MySQL或MariaDB)并恢复所有数据。

    进步
    76% 很多人觉得这篇文章很有帮助

    为什么恒星®是全球领导者

    为什么选择Stellar?
    • 0+

      客户

    • 0+

      卓越岁月

    • 0+

      研发工程师

    • 0+

      国家

    • 0+

      合作伙伴

    • 0+

      所获奖项

    • 我们符合iso 27001标准
    • 我们符合iso 9001标准
    • NIST
    • HIPAA验证