在服务器端处理时在搜索字符串中输入特殊字符
Input special character in search string when handled at server side
我正在测试我正在进行的项目。在这里,我在服务器端(Java)放置了一个过滤器,每当我在查询字符串中遇到任何 HTML 标记(如正则表达式(URL Encoded is also checked))时,将页面重定向到错误页面.根据我的技能,它工作正常。但我非常确定这还没有结束。必须有一种方法仍然可以输入向量来执行 XSS 脚本。
示例 : 重定向到错误页面
%3Chello%3E
转换为 并重定向到错误页面
%253Chello%253E
转换为 %3Chello%3E
& 页面工作正常,因为没有找到 HTML 标签。
- 您尝试的方法是黑名单方法,即搜索不良字符(IE <、>)并重定向到错误页面 and\or 对其进行编码。这是错误的做法。
如果输入包含任何不允许的字符,您应该使用允许字符的白名单并重定向到错误页面。实施此方法的一种方法是正则表达式:
^[a-zA-Z0-9]*$
或 ^[\s\w]*$
。添加客户端验证和服务器验证将使您安全无误(除非黑客试图绕过客户端验证,在这种情况下服务器验证会阻止他)。
如果您试图猜测攻击者的方法,您注定会失败。
- 对用户发起的输入进行编码以防止 XSS 的正确方法是 HTML 编码,而不是 URL 编码(不是
%3Chello%3E
,而是 >hello<
)。
- 如果您对用户输入进行编码,则不必将用户重定向到错误页面,因为您提供的示例和我提供的示例都是无害的
话虽如此,这里有一个没有 < 和 > 的 XSS 示例:
假设一个页面接收到一个图片文件名并显示它,并且不对引号字符进行编码:
https://contoso.com/displaypic?source=111.jpg
<img src="111.jpg"></img>
如果你访问这个 URL,你自己就有了 XSS:
https://contoso.com/displaypic?source=a"+onerror="alert('XSS')
<img src="a" onerror="alert('XSS')"></img>
我正在测试我正在进行的项目。在这里,我在服务器端(Java)放置了一个过滤器,每当我在查询字符串中遇到任何 HTML 标记(如正则表达式(URL Encoded is also checked))时,将页面重定向到错误页面.根据我的技能,它工作正常。但我非常确定这还没有结束。必须有一种方法仍然可以输入向量来执行 XSS 脚本。
示例 :
%3Chello%3E
转换为
%253Chello%253E
转换为 %3Chello%3E
& 页面工作正常,因为没有找到 HTML 标签。
- 您尝试的方法是黑名单方法,即搜索不良字符(IE <、>)并重定向到错误页面 and\or 对其进行编码。这是错误的做法。
如果输入包含任何不允许的字符,您应该使用允许字符的白名单并重定向到错误页面。实施此方法的一种方法是正则表达式:
^[a-zA-Z0-9]*$
或^[\s\w]*$
。添加客户端验证和服务器验证将使您安全无误(除非黑客试图绕过客户端验证,在这种情况下服务器验证会阻止他)。 如果您试图猜测攻击者的方法,您注定会失败。 - 对用户发起的输入进行编码以防止 XSS 的正确方法是 HTML 编码,而不是 URL 编码(不是
%3Chello%3E
,而是>hello<
)。 - 如果您对用户输入进行编码,则不必将用户重定向到错误页面,因为您提供的示例和我提供的示例都是无害的
话虽如此,这里有一个没有 < 和 > 的 XSS 示例: 假设一个页面接收到一个图片文件名并显示它,并且不对引号字符进行编码:
https://contoso.com/displaypic?source=111.jpg <img src="111.jpg"></img>
如果你访问这个 URL,你自己就有了 XSS:
https://contoso.com/displaypic?source=a"+onerror="alert('XSS') <img src="a" onerror="alert('XSS')"></img>