【发布时间】:2018-09-20 22:13:46
【问题描述】:
我为 mysql 编写了一些代码,起初我将其全部参数化。 后来有人告诉我,它不再安全了。 它是我尝试修复的旧程序,但标准输入查询对注入不安全。尽管代码中发生了很多“其他”mysql 事情,但没有多少区域可以生成新数据或打开用户查询。 所以然后我想(不要以什么是最好的注入证明方法而告终),让我们重新格式化输入字符串,这样我们就永远不会遇到这种情况。我写了一个正则表达式来始终正确格式化 varchar 输入字段
我现在正在使用它:
public string AllowedAsci(string input, string symbol="*")
{
return Regex.Replace(input, @"[^a-zA-Z0-9-+_@., ]", symbol);
}
这基本上是基本电子邮件和数字的严格正则表达式,我的问题是这个正则表达式可以扩展到其他安全使用符号的宽度。
重要更新
这个问题的重点从来都不是讨论使用 mysql 参数,我从一开始就知道,虽然政治在起作用,但这里是我不允许接触的代码分支。目前,我无意在工作中(再次)陷入争论,也无意触碰该代码,我最终可能会责怪他们,但这是政治问题。
所以请继续关注什么是删除转义码的好正则表达式,但另一方面允许不允许注入的字符串。
- 正则表达式规则确实可以防止我知道的所有注入 除非你能用更好的正则表达式证明我的宽度错误。
【问题讨论】:
-
“后来有人告诉我它不再安全了。”有人错了,或者这是不完整的信息
-
您和告诉您参数化查询“不再安全”的人之间是否存在某种误解?您能否提供一个旧代码示例?
-
我投票结束这个问题,因为它是基于“参数化代码不安全”的错误前提。
-
另外,如果此代码应该允许电子邮件地址,则您需要包含更多字符,这会使您的 Injection Proofing 变得毫无用处。
-
@user3800527 “我不想再次陷入冲突,应该有一些更好的正则表达式” 不,这不是正确的方法。您冒着安全风险来避免冲突,当出现问题时,您将承担责任。
标签: c# mysql sql-injection