regex - Notepad++ 中 JSP 源代码中 SQL 注入模式的正则表达式
问题描述
我正在尝试创建一个正则表达式来查找 JSP 源代码中的 SQL 注入模式。我正在使用 Notepad++ Find in Files 功能,我想在数百个文件中找到一个模式。模式看起来像这样:
1) 文件的第一部分必须包含以下任何内容:
- 获取
- 邮政
- 投入
- 删除
- 复制
- 做选项
2)其次,文件必须包含(注意这可以是字符串或整数):
String foo = request.getParameter("bar");
3)第三,文件还必须包含
选择...在哪里...+...foo...
请注意,第三部分中的 SQL 语句使用的是第二部分中设置的参数。
另一个重要的注意事项是,每个部分之间可能有 N 个字符、换行符、回车符、代码行,或者你有什么。
使用https://regexr.com/我想出了以下正则表达式:
^.*doGet.*[\r\n]*.*String\s(.*)\s\=\srequest.getParameter.*[\r\n]*.*select.*where.*\+.*\1
匹配例如:
doGet();
String foo = request.getParameter('bar');
String qry = "select * from test where id =" + foo;
但是它不匹配:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
code = code.code;
test = test.test;
donothing();
}
String foo = request.getParameter('bar');
if(foo){
String qry = "select * from test where id =" + foo;
}
解决方案
感谢@Code Maniac
^.*?doGet[\w\W]+?String ([^=]+) = request\.getParameter[\w\W]+?select.*where[^+]+\+ \1
似乎这是产生最少误报的最佳答案。
推荐阅读
- javascript - 无法将获取的数据对象的属性(作为道具)从子组件传递到另一个页面?
- c# - SDK 样式项目中的 ProjectReference 忽略传递依赖项的条件
- julia - 如何在本地 Julia 环境中将默认 Float 更改为 Float32?
- android - 如何在数据绑定布局中动态修改布局表达式?
- kubernetes - 如何防止水平 pod autoscaler 取出正在积极工作的 pod?
- masstransit - 如果消息无法完成,则停止消费
- gradle - 如何修复 gradle 错误:“不再支持源选项 5。使用 6 或更高版本”?
- python - 有没有办法使用 Github Actions 停止和重新启动自托管 Python 脚本?
- r - 有没有办法改变像 paste 这样的函数中的参数顺序,这些函数按顺序排列向量,使其与管道运算符兼容?
- angular - 如何在 Angular 10 中使用 ngforage