如何在JSP/Servlet Web应用程序中防止XSS攻击?
我有一个用户表单.如果用户输入字符串'或"作为其一部分,我没有问题.表单已提交并正确保存到数据库中.我的问题是当我重新加载页面时(所有条目都可以修改并在显示之前加载到JSP中的列表中).在加载页面时,我收到一条错误消息:
missing ) after argument list 'Caroline's message', \n
Run Code Online (Sandbox Code Playgroud)
我需要做什么来逃避这个字符串以便在前端显示它?
这是我在前端使用的代码,用于读取数据并将其存储在JavaScript对象中.我不完全确定我需要逃离的地方.导致问题的字段是c.getComName:
communications[<%=i%>][1] = new CommObject('<%=c.getComId()%>', '<%=c.getComName()%>');
Run Code Online (Sandbox Code Playgroud)
使用HTML生成更新:
communications[0][1] = new CommObject('101', 'Caroline's Message');
Run Code Online (Sandbox Code Playgroud) 我需要改变",以\"与JSTL替换功能使用的字符串输入标签,如:
<input type="hidden" name="text" size="40" value="${text}">
Run Code Online (Sandbox Code Playgroud)
如果${text}有",则HTML将被破坏.
所以我试过了
<input type="hidden" name="text" size="40" value="${fn:replace(text, "\"", "\\\""}">
Run Code Online (Sandbox Code Playgroud)
和
<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '\"'}">
Run Code Online (Sandbox Code Playgroud)
但没有奏效.该页面会出错
org.apache.el.parser.ParseException:遇到""}""}""在第1行第32列.期待其中一个:"." ...")"......"["...","...">"..."gt"..."<"..."lt"..."> =". .."ge"......"<="......"le"......"=="......"eq"......"!="......"ne"......"&&" ......"和"......"||" ..."或"......"*"......"+"......" - "..."/"..."div"..."%"..."mod".. .
我怎样才能做到这一点?
更新
我错过了替换功能的密切关注.正确的是这个与亲密的人:
<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '\"')}">
Run Code Online (Sandbox Code Playgroud)
UPDATE2
我发现在发布文本时,使用\不是一个好主意,因为这个原因为什么不能在HTML输入标签中使用?.代码应该是这样的:
<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '"')}">
Run Code Online (Sandbox Code Playgroud) 我在JSP中有一个表单.我必须根据请求对象(来自servlet)填充它.如何使用Java Script访问请求对象属性,或者您是否可以建议我以其他方式动态填充表单?
我正在尝试根据bean的值设置组件的文本.我正在使用jquery,因为文本根据特定条件而变化.
所以,jquery代码看起来像这样:
window.onload =function(){
$('.pnx-inline-input').on("change keyup paste", function(){
var saveText = #{extra.Active_Save};
$('.save-button .pnx-btn-text').html(saveText);
});
Run Code Online (Sandbox Code Playgroud)
Extra bean处理本地化.所以,假设语言环境是法国,文本是Enregister.问题在于,在呈现页面时,代码段看起来像这样
window.onload =function(){
$('.pnx-inline-input').on("change keyup paste", function(){
var saveText = Enregister;
$('.save-button .pnx-btn-text').html(saveText);
});
Run Code Online (Sandbox Code Playgroud)
当然,Enregister没有在任何地方定义,这会导致错误.我需要代码看起来像
var saveText = "Enregister";
Run Code Online (Sandbox Code Playgroud)
为此有意义.
我怎样才能做到这一点?谢谢!