从Java向JavaScript函数安全发送字符串参数

从Java向JavaScript函数安全发送字符串参数,java,webview,Java,Webview,我的基于WebView组件的Java项目。 现在,我想用单个字符串参数调用一些JS函数。 为此,我使用了简单的代码: webEngine.executeScript("myFunc('" + str + "');"); *str文本正在从texarea获取 此解决方案可行,但不够安全。 有时我们会得到netscape.javascript.JSException:SyntaxError:Unexpected EOF 那么,如何处理str以避免异常呢?我找到了这个快速解决方法: str = st

我的基于WebView组件的Java项目。 现在,我想用单个字符串参数调用一些JS函数。 为此,我使用了简单的代码:

webEngine.executeScript("myFunc('" + str + "');");
*str文本正在从texarea获取

此解决方案可行,但不够安全。 有时我们会得到
netscape.javascript.JSException:SyntaxError:Unexpected EOF


那么,如何处理
str
以避免异常呢?

我找到了这个快速解决方法:

str = str.replace("'", "\\'");
str = str.replace(System.getProperty("line.separator"), "\\n");
str = str.replace("\n", "\\n");
str = str.replace("\r", "\\n");

Letfar的答案在大多数情况下都有效,但不是所有情况下都有效,如果您是出于安全原因这样做的,那么这还不够。首先,反斜杠也需要避免。其次,line.separator属性是服务器端的EOL,它只会碰巧与客户端的相同,并且您已经在逃避这两种可能性,因此第二行是不必要的

总而言之,不能保证其他控件或非ASCII字符不会给浏览器带来一些问题(例如,在URL错误中看到当前的Chrome nul),不识别JavaScript的浏览器(比如屏幕阅读器和其他可访问性工具)也可能尝试解释HTML特殊字符,所以我通常转义[^-~]和[\'”&](这是正则表达式字符范围,表示所有字符不包括空格和波浪号;以及反斜杠、单引号、双引号、和号、小于、大于)。偏执?一点,但如果str是用户输入的字符串(或根据用户输入的字符串计算),您需要有点偏执,以避免出现安全漏洞

当然,真正的答案是使用一些开源软件包来进行转义,转义是由了解安全性的人编写的,或者使用一个框架来为您进行转义。

可能的重复肯定不是“安全的”。如果您的标题是准确的(“从Java向JavaScript函数安全发送字符串参数”),这不是一个好的解决方案。