一直关注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语句中发生)。
我错过了什么?
答案 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很慢,应该避免使用。)