0

一直在关注 esapi4java-core-2.0-install-guide.pdf for Eclipse 并将其应用到 Websphere 7.5 环境中。

第 1 步 - 我在库中添加了 esapi.jar(项目 > 属性 > Java 构建路径 > 库选项卡 > 添加外部 JAR)。

第 2 步 - 我将 esapi 和验证 .properties 文件放在我机器上的一个文件夹中。

第 3 步 - 我选择为所有运行配置添加 esapi(Windows > Preferences > Java > Installed JREs)。我突出显示了 WebSphere Application Server v7.0 JRE,选择了“编辑”并将 esapi.jar 添加到该库列表中。在同一个表单上,我将 -Dorg.owasp.esapi.resources="/path/to/.esapi" 参数添加到 Default VM Arguments 提示符,即我的 esapi 和验证 .properties 文件所在的路径。

这是 JSP 页面上失败的代码:

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%@ page import="java.net.*" %>

<script type="text/javascript" language="javascript">

function validateForm()
{

    var userURL = "http://www.google.com";
    var isValidURL = ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); 
    if (isValidURL) {
        alert("true");
    } else {
    alert("false");
    }
}

</script>

执行这段代码后,我收到错误:'ESAPI' 未定义(发生在 var isValidURL 语句上)。

我错过了什么?

4

1 回答 1

1

我没有看到您在 jsp 中导入 esapi 的位置。

尝试这个:

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%@ page import="java.net.*, org.owasp.esapi.ESAPI, org.owasp.esapi.Validator" %>


<script type="text/javascript" language="javascript">

function validateForm()
{

    var userURL = "http://www.google.com";
    var isValidURL = <% ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); %>
    if (isValidURL) {
        alert("true");
    } else {
    alert("false");
    }
}

</script>

另请注意,我强烈建议在接收控制器中而不是在 jsp 中进行验证...... JSP 编译的开销是谋杀而不增加解析输入的开销。我要给你的另一个警告是,如果你注意到 esapi 文档,调用会isValidInput()忽略绝对关键的规范化。你会想getValidInput()改用。如果您觉得需要使用,isValidInput()那么您需要确保手动调用canonicalize()哪个是Encoder类中的方法。另外,请注意这一行:

var isValidURL = ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); 

由于 ESAPI 不是JavaScript库,因此犯了一个严重错误。此调用应如下所示:

var isValidURL = <% ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); %>

通常,如上所述,您希望在将使用此 jsp 作为输入的控制器上进行此验证,而不是在 jsp 本身上进行验证。(Scriptlet 很慢,应该避免。)

于 2014-05-15T20:03:59.923 回答