gpt4 book ai didi

c# - 实体 SQL 和 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-11-30 16:26:11 25 4
gpt4 key购买 nike

我有以下查询字符串

"SELECT VALUE entity FROM Entities AS entity WHERE entity.Client_id
= 0 && entity.Name LIKE @searchvalue ORDER BY @sorting SKIP @skip LIMIT @limit"

使用以下参数替换

query.Parameters.Add(new ObjectParameter("skip", start));
query.Parameters.Add(new ObjectParameter("limit", limit));
query.Parameters.Add(new ObjectParameter("searchvalue", searchValue + "%"));
query.Parameters.Add(new ObjectParameter("sorting", sortField + " " + sortDirection.ToUpper()));

但我总是以异常结束:

The key expression 'ORDER BY' must have at least one reference to the immediate input scope. Near ORDER BY clause item

我猜这会导致 query.Parameters.Add(...) 全部用引号引起来?我还读了this但是如果什么都没有发生,我需要 query.Parameters.Add(...) 有什么好处呢?好的,攻击者可能不会开始新的查询,但我猜他可以操纵当前的查询?

最佳答案

猜猜:我会尝试做这样的事情的第一件事

SELECT VALUE entity FROM Entities AS entity WHERE entity.Client_id = 0 && entity.Name LIKE '@searchvalue' ORDER BY @sorting @sortorder SKIP @skip LIMIT @limit

query.Parameters.Add(new ObjectParameter("searchvalue", searchValue + "%"));
query.Parameters.Add(new ObjectParameter("sorting", sortField ));
query.Parameters.Add(new ObjectParameter("sortorder", sortDirection));

换句话说:将排序移动到单独的参数。

编辑

如果这不起作用,请使用 Query Builder构造一个查询。

here例如。

祝你好运。

关于c# - 实体 SQL 和 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076094/

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