“esapi”在Websphere 7中未定义

时间:2014-05-15 15:30:19

标签: eclipse install websphere-7 esapi

一直关注Eclipse的esapi4java-core-2.0-install-guide.pdf并在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语句中发生)。

我错过了什么?

1 个答案:

答案 0 :(得分: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很慢,应该避免使用。)