我知道我需要在用户输入字段(例如用户名输入字段)上使用它们,但是对于单选按钮(例如性别选项)呢?
答案 0 :(得分:5)
您似乎将转义与数据验证和数据清理混淆。
您需要验证任何进入的数据。是的,这意味着确保单选按钮包含合法值。
您需要清理任何数据。该文本字段是否应包含HTML?没有? strip_tags
。这个字段应该是一个数字吗?将其转换为整数。
您需要转义您放置在数据库中的所有数据。如果您仍在使用史前“mysql”扩展程序,则意味着在构建查询时对所有使用mysql_real_escape_string
- 而不是之前。
您需要转义您回应用户的任何数据。 htmlspecialchars
是你的朋友。
I've previously explained this in more detail,虽然这不是一个重复的问题。
答案 1 :(得分:2)
应检查从表单发送到服务器的所有字段的有效输入。所有字段都可以通过sql或其他注入的方式进行操作。
答案 2 :(得分:2)
流行测验:
给出一个小的HTML表单代码:
<input type="hidden" name="studentID" value="42" />
<input type="radio" name="gender" value="Robert'; DROP TABLE Students" />
和您的服务器端代码:
$studentID = $_POST['studentID'];
$gender = $_POST['gender'];
$sql = "UPDATE Students SET gender='$gender' WHERE studentID=$studentID";
$res = mysql_query($sql);
这段代码有多少种错误?
@Basic,在mininum,这是'大'错误:
当只有学生的性别问题时,没有那么大的交易。也许有一封关于“罗伯特女士”和“她”最近被拘留的表格信件。
如果它是一个网上银行网站并且SQL注入只是将您的支票账户余额转移到开曼群岛的一些离岸账户,那就非常重要。
答案 3 :(得分:1)
有很多方法(供用户使用)更改提交的数据,所以 - 是的,您需要将它用于单选按钮。
例如,您可以将单选按钮更改为输入类型文本,并轻松修改该值。
答案 4 :(得分:1)
是的,你需要它。用户可以根据自己的喜好更改表单输入。萤火虫创造了奇迹。
答案 5 :(得分:1)
好吧,你应该对你传递给mysql的所有字符串都这样做,不一定是网络输入; - )
答案 6 :(得分:0)
是。实际上,您还应该检查单选按钮/列表的值,以确保该值是有效值。见in_array()
。这是一个示例(为清晰起见,省略了isset
检查):
$validValues = array('gold', 'silver', 'bronze');
$value = $_POST['value'];
if (in_array($value, $validValues)) {
// request is valid
} else {
// request is invalid
}
你唯一不应该使用mysql_real_escape_string()
,那就是你希望整数的值。但你必须小心处理它们。阅读这篇文章:
http://www.webappsec.org/projects/articles/091007.shtml
该文章介绍了您不希望SQL注入的情况,包括如何处理整数。
答案 7 :(得分:0)
一个很好的方法,你可以保护你的$ _POST输入是通过运行array_map()这比手动foreach()快得多。
$formData = array_map('mysql_real_escape_string', $_POST);
您甚至可以通过创建getPost()函数来封装此过程。
function getPost($key) {
return array_key_exists($key, $_POST)
? mysql_real_escape_string($_POST[$key])
: null);
}
希望这有帮助。