Code Injection
代码注入
描述
代码注入是指一种攻击方法类别,涉及插入随后由应用程序评估的代码。这种形式的攻击利用了对不受信任数据的处理不当。此类漏洞通常是由于对输入/输出的用户提供的数据验证不足而引起的。
代码注入与命令注入的区别在于,攻击者的能力仅限于目标编程语言固有的功能。例如,如果攻击者成功地将 PHP 代码注入应用程序并执行,则他们的操作受 PHP 功能的限制。另一方面,命令注入涉及利用预先存在的代码来执行系统命令。
print "Enter math equation: "
user_input = gets.chomp
begin
result = eval(user_input)
puts "Result: #{result}"
rescue StandardError => e
puts "Error: #{e.message}"
end
<?php
$userInput = $_POST['expression'];
$result = null;
try {
eval("\$result = $userInput;");
} catch (ParseError $e) {
echo "Error: Invalid Expression";
}
echo "Result: " . $result;
?>
try:
user_input = input("Enter a math expression: ")
result = eval(user_input)
print("Result:", result)
except Exception as e:
print("Error:", e)
建议
为了缓解代码注入漏洞,以下是一些可能的缓解措施:
-
避免评估用户输入:防止代码注入的最佳方法是根本不评估用户输入。
-
输入验证和清理:如果必须评估用户输入,则应首先对其进行清理,以删除可能允许代码执行的特殊字符(例如括号)。
-
使用沙盒环境:缓解代码注入风险的一种方法是在隔离且受限的沙盒环境中评估用户输入。
-
最小特权原则:虽然不是专门针对代码注入,但最小特权原则可以通过减少攻击者在成功破坏系统时可能获得的特权来帮助降低漏洞的影响。
print "Enter math equation: "
user_input = gets.chomp
# 净化用户输入
sanitized_input = user_input.gsub(/[^0-9+\-\/\*]/, '')
begin
result = eval(sanitized_input)
puts "Result: #{result}"
rescue StandardError => e
puts "Error: #{e.message}"
end
<?php
$userInput = $_POST['expression'];
// Sanitize user input
$sanitizedInput = preg_replace("/[^0-9+\-\/\*]/", "", $userInput);
$result = null;
try {
$result = eval("return $sanitizedInput;");
} catch (ParseError $e) {
echo "Error: Invalid Expression";
}
echo "Result: " . $result;
?>
import re
try:
user_input = input("Enter a Python expression: ")
# 净化用户输入
sanitized_input = re.sub(r'[^0-9+\-*/]', '', user_input)
result = eval(sanitized_input)
print("Result:", result)
except Exception as e:
print("Error:", e)
链接
标准
- CWE_TOP_25:
- CWE_20
- CWE_94
- GDPR:
- ART_5
- ART_32
- PCI_STANDARDS:
- REQ_6_2
- REQ_6_3
- REQ_11_3
- SOC2_CONTROLS:
- CC_2_1
- CC_3_4
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213
- SECURITY255