<bdo id='21XeI'></bdo><ul id='21XeI'></ul>
    1. <i id='21XeI'><tr id='21XeI'><dt id='21XeI'><q id='21XeI'><span id='21XeI'><b id='21XeI'><form id='21XeI'><ins id='21XeI'></ins><ul id='21XeI'></ul><sub id='21XeI'></sub></form><legend id='21XeI'></legend><bdo id='21XeI'><pre id='21XeI'><center id='21XeI'></center></pre></bdo></b><th id='21XeI'></th></span></q></dt></tr></i><div id='21XeI'><tfoot id='21XeI'></tfoot><dl id='21XeI'><fieldset id='21XeI'></fieldset></dl></div>

      1. <legend id='21XeI'><style id='21XeI'><dir id='21XeI'><q id='21XeI'></q></dir></style></legend><tfoot id='21XeI'></tfoot>
      2. <small id='21XeI'></small><noframes id='21XeI'>

        详细聊聊关于sql注入的一些零散知识点

        时间:2023-12-07
        <tfoot id='JhcBP'></tfoot>

          <small id='JhcBP'></small><noframes id='JhcBP'>

          1. <i id='JhcBP'><tr id='JhcBP'><dt id='JhcBP'><q id='JhcBP'><span id='JhcBP'><b id='JhcBP'><form id='JhcBP'><ins id='JhcBP'></ins><ul id='JhcBP'></ul><sub id='JhcBP'></sub></form><legend id='JhcBP'></legend><bdo id='JhcBP'><pre id='JhcBP'><center id='JhcBP'></center></pre></bdo></b><th id='JhcBP'></th></span></q></dt></tr></i><div id='JhcBP'><tfoot id='JhcBP'></tfoot><dl id='JhcBP'><fieldset id='JhcBP'></fieldset></dl></div>

              <tbody id='JhcBP'></tbody>
              <bdo id='JhcBP'></bdo><ul id='JhcBP'></ul>
                <legend id='JhcBP'><style id='JhcBP'><dir id='JhcBP'><q id='JhcBP'></q></dir></style></legend>
                • 详细聊聊关于SQL注入的一些零散知识点

                  SQL注入(SQL Injection)是指攻击者通过注入恶意的SQL代码来篡改原有的SQL语句以达到攻击目的。SQL注入是一种最常见的Web安全漏洞之一,现在仍然是黑客攻击网站的重要手段之一。此文将会介绍一些关于SQL注入的零碎知识点。

                  如何判断是否存在SQL注入漏洞

                  判断是否存在SQL注入漏洞通常可以通过在参数值中输入一些特殊字符来进行测试,如单引号 '", 小于符号 <等等。

                  例如,如果用户名输入框的值传输到后台的语句是这个样子的:

                  SELECT * FROM users WHERE name = '${username}';
                  

                  那么在用户名输入框中输入一个单引号 ', 后台执行的语句就会变为:

                  SELECT * FROM users WHERE name = '''';
                  

                  这显然是会出错的,因为SQL语句中缺少了一个引号。这就意味着:当我们在输入框中输入 ' 的时候,如果执行的 SQL 语句报错了,那么很有可能存在 SQL 注入漏洞。同理,有些恶意的SQL注入数据可以用来删除表,删除数据等,所以我们在编写应用程序时尽量要使用预编译语句和参数。

                  防范SQL注入攻击

                  预编译语句

                  预编译语句是指先编写一条SQL语句的模板,并在执行SQL语句之前先对模板中的参数进行赋值,最终生成一条完整的SQL语句来执行。

                  例如,在Java中我们可以通过使用 PreparedStatement 来构造预编译语句,示例代码如下:

                  PreparedStatement pst = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
                  pst.setInt(1, userId);
                  
                  ResultSet rs = pst.executeQuery();
                  

                  这里是一个参数化的 SQL 查询,第二行的pst.setInt(1, userId) 会将 userId 值绑定到 ? 占位符上,这样就避免了 SQL 注入攻击。

                  输入检查

                  在用户输入的字符串上,我们可以对输入进行校验,只允许包含英文字母,数字,下划线和减号,不允许包含特殊符号。

                  例如,以下代码演示了校验输入的合法性:

                  def input_check(input_str):
                      if not re.match(r'^\w+(-\w+)*$', input_str):
                          raise ValueError('Invalid input string!')
                  

                  这样可以有效防范SQL注入攻击。

                  示例说明

                  示例1

                  假设一个博客网站:

                  SELECT * FROM `articles` where title = '${articleTitle}'
                  

                  如果攻击者在文章标题上输入 ';DROP TABLE articles,那么执行的SQL语句变成:

                  SELECT * FROM `articles` where title = '';DROP TABLE articles';
                  

                  整个articles表会被删除。

                  示例2

                  假设你的网站的用户登录使用的是如下方式:

                  SELECT * FROM users WHERE username='$username' AND password=MD5('$password')
                  

                  如果攻击者在用户名输入框中输入: admin';--,那么产生的查询语句将变成:

                  SELECT * FROM users WHERE username='admin';--' AND password=MD5('')
                  

                  --是SQL语法上的注释符号,它后面的内容将被注释掉,导致密码验证失效 since 这个语句的执行过程中没有密码验证的过程。

                  因此,为了防范这种攻击,我们应该使用参数化预编译查询,并且对于一些特殊字符要进行过滤和判断,以免漏洞被利用导致安全问题。

                  上一篇:解决Spring Data Jpa 实体类自动创建数据库表失败问题 下一篇:关于case when语句的报错问题详解

                  相关文章

                • <legend id='hvNzm'><style id='hvNzm'><dir id='hvNzm'><q id='hvNzm'></q></dir></style></legend>

                  <small id='hvNzm'></small><noframes id='hvNzm'>

                    <tfoot id='hvNzm'></tfoot>
                  1. <i id='hvNzm'><tr id='hvNzm'><dt id='hvNzm'><q id='hvNzm'><span id='hvNzm'><b id='hvNzm'><form id='hvNzm'><ins id='hvNzm'></ins><ul id='hvNzm'></ul><sub id='hvNzm'></sub></form><legend id='hvNzm'></legend><bdo id='hvNzm'><pre id='hvNzm'><center id='hvNzm'></center></pre></bdo></b><th id='hvNzm'></th></span></q></dt></tr></i><div id='hvNzm'><tfoot id='hvNzm'></tfoot><dl id='hvNzm'><fieldset id='hvNzm'></fieldset></dl></div>
                      <bdo id='hvNzm'></bdo><ul id='hvNzm'></ul>