面试题答案
一键面试基本步骤
- 安装工具:在Ruby项目的环境中,使用
gem install rubocop
命令安装RuboCop。 - 初始化配置:运行
rubocop --auto-gen-config
生成默认配置文件.rubocop.yml
。 - 运行检测:在项目根目录下执行
rubocop
命令,RuboCop会遍历项目中的Ruby文件并检测代码是否符合规则。
常用配置
- 启用安全相关规则:在
.rubocop.yml
中,确保与安全相关的规则被启用,例如Security/Eval
、Security/InsecureSQL
等规则。例如:
Security/Eval:
Enabled: true
Security/InsecureSQL:
Enabled: true
- 自定义规则:如果默认规则不满足需求,可以自定义规则。比如定义一个新的规则来检测特定模式的SQL注入风险。
示例
假设存在以下简单的SQL注入风险代码片段:
username = gets.chomp
sql = "SELECT * FROM users WHERE username = '#{username}'"
- 发现问题:运行
rubocop
后,它会检测到上述代码中字符串拼接SQL语句的操作可能存在SQL注入风险,并给出类似如下提示:
Inspecting 1 file
C
Offenses:
example.rb:2:16: C: Security/InsecureSQL: Possible SQL injection detected. Avoid string interpolation in SQL statements.
sql = "SELECT * FROM users WHERE username = '#{username}'"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1 file inspected, 1 offense detected
- 修复问题:可以使用参数化查询来修复这个问题,修改后的代码如下:
require 'pg'
username = gets.chomp
conn = PG.connect(dbname: 'your_database', user: 'your_user', password: 'your_password')
sql = "SELECT * FROM users WHERE username = $1"
result = conn.exec_params(sql, [username])
这样就避免了SQL注入风险,再次运行rubocop
,该安全问题提示将不再出现。