Javascript 在进行正则表达式检查时是否需要进行HTML转义?

Javascript 在进行正则表达式检查时是否需要进行HTML转义?,javascript,java,html,jakarta-ee,Javascript,Java,Html,Jakarta Ee,我正在开发一个Web应用程序,它通过HTML输入接收用户输入,并将其发送到我的tomcat服务器进行进一步处理 当前我的工作流如下所示: String post_param_1 = request.getParameter("param_1"); if (post_param_1 != null && post_param_1.matches(regex)) { // param present and valid } 客户端 JS->take HTML input->

我正在开发一个Web应用程序,它通过HTML输入接收用户输入,并将其发送到我的tomcat服务器进行进一步处理

当前我的工作流如下所示:

String post_param_1 = request.getParameter("param_1");
if (post_param_1 != null && post_param_1.matches(regex)) {
    // param present and valid
}
客户端

JS->take HTML input->do regex check->if successfull->$.post(…)

服务器

接收post数据->执行正则表达式检查->如果成功->处理数据

从我的理解,这应该是好的,没有必要做HTML转义

但是我想知道是否还有一种方法可以潜入一些不允许的东西


进一步思考:

在my.java文件中

public void doPost(HttpServletRequest请求,HttpServletResponse响应){…}
方法执行以下操作以接收发送的参数:

String post_param_1 = request.getParameter("param_1");
这(显然)必须在对特定参数运行正则表达式检查之前发生

问题#1:这可能是攻击者潜入/在java代码中造成不必要行为的“打开的窗口”吗?攻击者可以使用单独的工具发送post请求,而不是通过常规网站(例如)

问题2:如果问题1被证明是真的,你能做如下事情吗

request.getParameter("param_1").matches(regex_string)
绕过这个

问题#3:如果我的方法足够,是否仍需要在某个时候进行HTML转义(可能是在获取JS中的输入和通过正则表达式运行之前)

最后,是否有人对这个主题有任何意见或建议,或者我遗漏了什么(比如在客户机和服务器上进行正则表达式检查太多)

问候 Alkahna

假设“HTML转义”是指将HTML特殊字符(如
)转换为它们的HTML实体(
),那么答案很简单:

当您将用户提供的输入显示回用户时,只需转义该输入。

您可以将其以纯文本格式*存储在数据库中。这使得后端文本处理(如搜索)更容易,也可能导出为其他非HTML格式

只有在将文本插入HTML页面时,才能对其进行转义。例如,假设您已从数据库检索文本并将其存储在名为“text”的请求属性中,然后在JSP页面中执行以下操作之一:

<c:out value="${text}" />
${fn:escapeXml(text)}
3我想我上面的要点回答了这个问题



*当我说“以纯文本格式存储”时,显然您需要在执行此操作时适当地防止SQL注入。对于一般的转义:我只接受输入并在服务器端处理它。文本的显示已通过转义处理。对于
1)
它通常针对注入攻击(JS也是)。这就是为什么我希望在这里安全的原因。对于
2)
你是对的,这就是我目前在代码中所做的。因此,您可以说,我的方法足以防止错误输入(regex)以及通过自动注入攻击吗?是的,在向用户显示文本时进行转义就是防止JS注入所需的全部。