我很感激为我提供了一套明确的指导方针或处理逃避字符串的裁决.我用来转义字符串的是apache commons-lang-xxjar库.特别是StringEscapeUtils.escapeHtml(String toEscape)方法.
我需要知道:
(1)在JSP页面或Servlet中转义字符串更好?
(2)你从JSTL推荐StringEscapeUtils.escapeHtml(..)或<c:out>是什么?
(3)处理多行字符串,哪个更好,直接在字符串中使用<br>,或者\n和nl2br()方法:
String strError = "Invalid username.\nPlease try again.";
要么
String strError = "Invalid username.<br>Please try again.";
(4)如何转义接收外卡的字符串,例如:
String strError = "Invalid user [%s].<br>Please specify another user."
(5)由于javascript转义字符不同.我应该使用什么来转义要在JSP页面的javascript部分内呈现的Java字符串(例如var name = "<%=javaStringHoldingName%>").
我的servlets/jsp Web应用程序存在一个小问题.我正在尝试在jsp页面中使用jstl.当我使用任何标签时,例如:
<c:out value="${command}"/>
Run Code Online (Sandbox Code Playgroud)
它告诉我
${command}
Run Code Online (Sandbox Code Playgroud)
在我的浏览器中而不是参数'command'值.我正在使用maven(我猜问题就在这里).这是pom xml依赖项:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我的web.xml声明标记:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
Run Code Online (Sandbox Code Playgroud)
和jsp部分:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Parsing results</title>
<link type="text/css" rel="stylesheet" href="css/page.css"/>
<link type="text/css" rel="stylesheet" href="css/table.css"/>
</head>
<body>
<h2 align="center">Results of
parsing. Parsing method = <c:out value="${command}"/></h2>.......
Run Code Online (Sandbox Code Playgroud)
编辑:设置命令值的代码很简单:
request.setAttribute("command", parser.getName());
Run Code Online (Sandbox Code Playgroud)
然后去
request.getRequestDispatcher(redir).forward(request, response);
Run Code Online (Sandbox Code Playgroud)
请告诉我,我做错了什么!谢谢!
如何保护我们的Web应用程序免受XSS攻击?如果一个应用程序没有对特殊字符进行任何转换,那么它就很容易受到攻击.
我要求用户创建,修改和删除自己的文章.我打算使用SO用来创建文章的WMD编辑器.
从我可以收集到的东西SO存储markdown和HTML.为什么这样做 - 有什么好处?
我无法决定是否存储降价,HTML或两者.如果我存储哪一个我检索并转换为显示给用户.
更新:
好吧,我想从目前为止的答案,我应该存储markdown和HTML.这看起来很酷.我也一直在阅读Jeff关于XSS漏洞的博客文章.因为WMD编辑器允许您输入任何HTML,这可能会让我感到头痛.
有问题的博文在这里.我猜我将不得不遵循与SO相同的方法 - 并清理服务器端的输入.
SO使用的清理代码是否可用作开源代码,还是我必须从头开始?
任何帮助将非常感激.
谢谢
在jsp页面中,我有一个输入值属性,以这种方式填充:
value="${param.name}"
Run Code Online (Sandbox Code Playgroud)
如果有人设法放置东西,它很容易受到XSS攻击
"><script>doEvil();</script>
Run Code Online (Sandbox Code Playgroud)
如何正确地逃避param.name的值来修复漏洞?
在从HTML提交数据后,servlet将这些数据添加到我的数据库并将结果消息转发到JSP页面.我希望在转发之后保留表单中最初提交的值.
在servlet中创建一个对象并添加我收到的所有参数并向JSP发送请求是否明智?还有另一种更好的方法吗?
在JSP文件中,我想用new替换换行符(\n)<br />.我试过了
${fn:replace(someString, '\n', '<br />')}
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个错误 '\n' ecnountered, was expeting one of...
我猜这意味着解析器不喜欢这样的东西.
是否可以使用EL做这样的事情?
嗨,有人可以帮助为什么这在尝试在JSP页面中显示值时出错.我没有转换任何数字或字符串已转换为数字,但我得到NumberFormatException
我的Servlet获取显示用户记录的请求
if(action.equalsIgnoreCase("update")){
System.out.println("Came into Update");
userId=(int) Integer.parseInt(request.getParameter("userid"));
nbId=request.getParameter("nbId").trim();
System.out.println("User iD and NBid: "+ userId + nbId);
User user=new User();
user.setUser_id(userId);
user.setUser_nbk(nbId);
List userRecords=UserDAO.getUserRecord(user);
request.setAttribute("userRecords", userRecords);
List owningOrg=Owning_Org_DB.getOwningOrgRecords();
request.setAttribute("owningOrg", owningOrg);
request.getRequestDispatcher("WEB-INF/JSP/TableMaintenance/UserNewAdd.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)
POJO:
@Entity
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class User {
@Id
private int user_id;
private String user_first_name;
private String user_middle_name;
private String user_last_name;
//getters and setters methos
}
Run Code Online (Sandbox Code Playgroud)
DAO:
public static List getUserRecord(User obj){
Logger lo=LoggerFactory.getLogger("UserDAO.getUserRecord");
Session session= Annotationsessionfactory.getAnnotationSession();
Transaction tx=session.beginTransaction();
lo.debug("Request for A user Record");
//List<User> recList=new ArrayList<User>();
List recList=null; …Run Code Online (Sandbox Code Playgroud) 我在当前项目中遇到了问题:用户可以使用textarea发送电子邮件.我们允许用户输入他们想要的内容,从而允许用于格式化的HTML.例如,应允许用户将<b>标记用于粗体文本.
完成电子邮件后,用户应该能够动态查看其电子邮件的预览.
但是有一个小问题,如何在显示预览时避免XSS黑客攻击?
您可以使用它们去除它们underscore.js,但这不会格式化它们的预览.
因此,我已禁止所有HTML标签,现在,只允许像标签<hr>,<b>等等.
您对此解决方案有何看法?它足够安全吗?