说我有一个URL
http://example.com/query?q=
Run Code Online (Sandbox Code Playgroud)
我有一个用户输入的查询,例如:
随机字500英镑银行$
我希望结果是一个正确编码的URL:
http://example.com/query?q=random%20word%20%A3500%20bank%20%24
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?我尝试URLEncoder并创建了URI/URL对象,但它们都没有完全正确.
有没有一种从Java字符串中删除HTML的好方法?一个简单的正则表达式
replaceAll("\\<.*?>","")
Run Code Online (Sandbox Code Playgroud)
会工作,但&不会正确转换,两个尖括号之间的非HTML将被删除(即.*?正则表达式将消失).
我应该怎么做才能阻止Spring MVC中的XSS?现在我只是把我输出用户文本的所有地方放到JSTL <c:out>标签或fn:escapeXml()函数中,但这似乎容易出错,因为我可能会错过一个地方.
是否有一种简单的系统方法来防止这种情况?也许像过滤器或什么?我通过@RequestParam在控制器方法上指定参数来收集输入.
我正在使用JSP和JDBC实现MVC.我已将数据库类文件导入到我的JSP文件中,并且我想显示数据库表的数据.我不知道应该如何ResultSet从Java类返回到JSP页面并将其嵌入HTML中.
我怎样才能做到这一点?
我已经完成了OWASP十大漏洞,发现跨站点脚本是我们必须记笔记的.建议的解决方案很少.有人说不要使用"黑名单"验证来检测输入中的XSS或编码输出.搜索和替换只有几个字符(<以及>其他类似的字符或短语script)很弱,并且已成功攻击.即使是未经检查的“<b>”标签在某些情况下也是不安全的.XSS拥有数量惊人的变体,可以轻松绕过黑名单验证.另一个解决方案是强输出编码.在渲染之前,确保所有用户提供的数据都经过适当的实体编码(HTML或XML,具体取决于输出机制).那么,这是阻止跨站点脚本验证和替换输入或编码输出的最佳方法?
我想循环遍历"节日" 的ArrayList,并使用get方法获取其信息,打印出所有值.出于某种原因,当我使用此代码时,它将始终选择"0"值而不是增加循环.
如果我将值硬编码为"get(1)",它将获得正确的值,因此我的问题显然与语法有关.
<h1>All Festival Information</h1>
<jsp:useBean id="allFestivals" type="java.util.ArrayList" scope="session" />
<table border="1">
<tr>
<td>Festival Name:</td>
<td>Location:</td>
<td>Start Date:</td>
<td>End Date:</td>
<td>URL:</td>
</tr>
<% for(int i = 0; i < allFestivals.size(); i+=1) { %>
<tr>
<td>${allFestivals.get(i).getFestivalName()}</td>
<td>${allFestivals.get(i).getLocation()}</td>
<td>${allFestivals.get(i).getStartDate()}</td>
<td>${allFestivals.get(i).getEndDate()}</td>
<td>${allFestivals.get(i).getURL()}</td>
</tr>
<% } %>
</table>
Run Code Online (Sandbox Code Playgroud) 我有这个特殊字符的奇怪问题.在JSP中,我使用字段名称作为id,名称可以是任何类似的
id="&lt;1 and &>2" (OR)
id="aaa & bbb"
Run Code Online (Sandbox Code Playgroud)
我没有任何其他选项来使用ID而不是名称,这是我从后端得到的唯一东西.
那么,是否有任何逻辑可以使用JSTL删除所有特殊字符.在目前的场景中,在In JS中,我将使用ID进行一些操作.这导致每种浏览器出现很多问题.
请建议,提前致谢...
我们使用jsp,servlets,bean和mysql数据库.我们不希望限制用户在表单字段上输入的字符.那么如何清理输入以及如何确保输出不会因恶意活动而更改.有没有办法在发送输出时我可以检查是否已经发送了额外的代码.就像假设有搜索输入字段 - 用户提供类似的东西<script>alert("I am here")</script>.有没有我可以知道这是一个HTML标签.如果用户在链接字段中附加了一个额外的参数,那么就像之前和之后的检查一样,我可以为文档做一些额外的链接字段.
我需要改变",以\"与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)