首页 > 解决方案 > 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;
}

标签: regexnotepad++

解决方案


感谢@Code Maniac

^.*?doGet[\w\W]+?String ([^=]+) = request\.getParameter[\w\W]+?select.*where[^+]+\+ \1

似乎这是产生最少误报的最佳答案。


推荐阅读