gpt4 book ai didi

c# - 防止 ORDER BY 子句中的 SQL 注入(inject)

转载 作者:可可西里 更新时间:2023-11-01 09:06:22 26 4
gpt4 key购买 nike

在我们的数据库访问层中,我们有一些动态查询创建。例如,我们有以下方法来构建 ORDER BY 子句的一部分:

protected string BuildSortString(string sortColumn, string sortDirection, string defaultColumn)
{
if (String.IsNullOrEmpty(sortColumn))
{
return defaultColumn;
}

return String.Format("{0} {1}", sortColumn, sortDirection);
}

问题是,sortColumnsortDirection 都是来自外部的字符串,所以当然应该采取一些措施来防止可能的注入(inject)攻击。有人知道如何做到这一点吗?

最佳答案

如果您必须处理字符串,那么白名单是您最好的选择。首先,sortDirection 对于白名单来说应该是微不足道的:与 "asc"/"desc" 相比大小写不敏感,你应该是放。对于其他人,我的偏好是将白名单列入已知列,也许通过为数据传递预期的Type 并进行验证。但是在绝对紧要关头,您可以使用正则表达式来限制(比如说)强制它们都是严格字母数字(在 a-z、A-Z、0-9 范围内——如果需要,可能下划线)——然后添加[],即

return string.Format("[{0}] {1}", sortColumn, sortDirection);

但是:已知列的严格白名单会好得多,方向的枚举也是如此。

关于c# - 防止 ORDER BY 子句中的 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14317341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com