GithubHelp home page GithubHelp logo

Comments (4)

Pa55w0rd avatar Pa55w0rd commented on May 14, 2024

太强了

from secguide.

ivybao0628 avatar ivybao0628 commented on May 14, 2024

1、问题描述
java 代码安全规范的【1.1.1 条】 SQL语句默认使用预编译并绑定变量 需补充

2、解决建议
应补充下列编码规范:

  • 在 Mybatis 中除了极为特殊的情况,应禁止使用 $ 拼接sql。
  • 所有 Mybatis 的实体bean对象字段都应使用包装类,防止 null 的二义性问题。
// 数据搜索时,编码注意要点
// 1)校验搜索数据的业务逻辑:例如搜索用户手机号,应限制输入数据只能输入数字,防止出现搜索英文或中文的无效搜索
// 2)mybatis预编译不会转义 % 符号,应阻止用户输入 % 符号以防止全表扫描
// 3)输入数据长度和搜索频率应进行限制,防止恶意搜索导致的数据库拒绝服务
<select id="getArticles" resultType="Article">
    SELECT * FROM article WHERE 1
    <if test="searchKeywordType == 'title'">
        AND title LIKE CONCAT('%', #{searchKeyword}, '%')
    </if>
        ORDER BY id DESC
</select>
// 编写 order by 时应使用内置指令,防止$拼接导致sql注入
<select id="findAllList" resultType="Article" >
    SELECT * FROM article ORDER BY
    <choose>
        <when test="page !=null and page != ''">
            #{page} asc
        </when>
        <otherwise>
            time desc
        </otherwise>
    </choose>
</select>

关于“编写 order by 时应使用内置指令,防止$拼接导致sql注入”下面的代码, 这个虽然能防止sql 注入,但是会导致程序会无法正确按传入的指定列进行排序了,也就是会把传入的列当成字符串,sql 执行就会非预期。

from secguide.

k4n5ha0 avatar k4n5ha0 commented on May 14, 2024

1、问题描述
java 代码安全规范的【1.1.1 条】 SQL语句默认使用预编译并绑定变量 需补充
2、解决建议
应补充下列编码规范:

  • 在 Mybatis 中除了极为特殊的情况,应禁止使用 $ 拼接sql。
  • 所有 Mybatis 的实体bean对象字段都应使用包装类,防止 null 的二义性问题。
// 数据搜索时,编码注意要点
// 1)校验搜索数据的业务逻辑:例如搜索用户手机号,应限制输入数据只能输入数字,防止出现搜索英文或中文的无效搜索
// 2)mybatis预编译不会转义 % 符号,应阻止用户输入 % 符号以防止全表扫描
// 3)输入数据长度和搜索频率应进行限制,防止恶意搜索导致的数据库拒绝服务
<select id="getArticles" resultType="Article">
    SELECT * FROM article WHERE 1
    <if test="searchKeywordType == 'title'">
        AND title LIKE CONCAT('%', #{searchKeyword}, '%')
    </if>
        ORDER BY id DESC
</select>
// 编写 order by 时应使用内置指令,防止$拼接导致sql注入
<select id="findAllList" resultType="Article" >
    SELECT * FROM article ORDER BY
    <choose>
        <when test="page !=null and page != ''">
            #{page} asc
        </when>
        <otherwise>
            time desc
        </otherwise>
    </choose>
</select>

关于“编写 order by 时应使用内置指令,防止$拼接导致sql注入”下面的代码, 这个虽然能防止sql 注入,但是会导致程序会无法正确按传入的指定列进行排序了,也就是会把传入的列当成字符串,sql 执行就会非预期。

哦我写错了,在原文里改好了,我在github上和作者讨论过,作者认为要么用choose标签要么用java层面进行逻辑判断。

from secguide.

ivybao0628 avatar ivybao0628 commented on May 14, 2024

1、问题描述
java 代码安全规范的【1.1.1 条】 SQL语句默认使用预编译并绑定变量 需补充
2、解决建议
应补充下列编码规范:

  • 在 Mybatis 中除了极为特殊的情况,应禁止使用 $ 拼接sql。
  • 所有 Mybatis 的实体bean对象字段都应使用包装类,防止 null 的二义性问题。
// 数据搜索时,编码注意要点
// 1)校验搜索数据的业务逻辑:例如搜索用户手机号,应限制输入数据只能输入数字,防止出现搜索英文或中文的无效搜索
// 2)mybatis预编译不会转义 % 符号,应阻止用户输入 % 符号以防止全表扫描
// 3)输入数据长度和搜索频率应进行限制,防止恶意搜索导致的数据库拒绝服务
<select id="getArticles" resultType="Article">
    SELECT * FROM article WHERE 1
    <if test="searchKeywordType == 'title'">
        AND title LIKE CONCAT('%', #{searchKeyword}, '%')
    </if>
        ORDER BY id DESC
</select>
// 编写 order by 时应使用内置指令,防止$拼接导致sql注入
<select id="findAllList" resultType="Article" >
    SELECT * FROM article ORDER BY
    <choose>
        <when test="page !=null and page != ''">
            #{page} asc
        </when>
        <otherwise>
            time desc
        </otherwise>
    </choose>
</select>

关于“编写 order by 时应使用内置指令,防止$拼接导致sql注入”下面的代码, 这个虽然能防止sql 注入,但是会导致程序会无法正确按传入的指定列进行排序了,也就是会把传入的列当成字符串,sql 执行就会非预期。

哦我写错了,在原文里改好了,我在github上和作者讨论过,作者认为要么用choose标签要么用java层面进行逻辑判断。

👍 看了你好多的修订意见挺不错的。

from secguide.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.