Tôi đã đặt các tệp sau trong tệp web.xml của ứng dụng của mình để cố gắng không cho phép PUT, DELETE, v.v.:
<security-constraint>
<web-resource-collection>
<web-resource-name>restricted methods</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>DELETE</http-method>
<http-method>PUT</http-method>
<http-method>SEARCH</http-method>
<http-method>COPY</http-method>
<http-method>MOVE</http-method>
<http-method>PROPFIND</http-method>
<http-method>PROPPATCH</http-method>
<http-method>MKCOL</http-method>
<http-method>LOCK</http-method>
<http-method>UNLOCK</http-method>
<http-method>delete</http-method>
<http-method>put</http-method>
<http-method>search</http-method>
<http-method>copy</http-method>
<http-method>move</http-method>
<http-method>propfind</http-method>
<http-method>proppatch</http-method>
<http-method>mkcol</http-method>
<http-method>lock</http-method>
<http-method>unlock</http-method>
</web-resource-collection>
<auth-constraint />
</security-constraint>
Được rồi, vậy bây giờ:
Nếu tôi thực hiện một yêu cầu với phương pháp DELETE
tôi sẽ nhận lại 403.
Nếu tôi thực hiện một yêu cầu với phương pháp delete
tôi sẽ nhận lại 403.
NHƯNG
Nếu tôi làm một yêu cầu với phương pháp DeLeTe
tôi nhận được OK!
Làm thế nào tôi có thể làm cho nó không cho phép những trường hợp không nhạy cảm?
Chỉnh sửa: Tôi đang thử nghiệm nó với chương trình C #:
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "making request";
System.Threading.Thread.Sleep(400);
WebRequest req = WebRequest.Create("http://serverurl/Application/cache_test.jsp");
req.Method = txtMethod.Text;
try
{
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
textBox1.Text = "Status: " + resp.StatusCode;
if (resp.StatusCode == System.Net.HttpStatusCode.OK)
{
WebHeaderCollection header = resp.Headers;
using (System.IO.StreamReader reader = new System.IO.StreamReader(resp.GetResponseStream(), ASCIIEncoding.ASCII))
{
//string responseText = reader.ReadToEnd();
textBox1.Text += "\r\n" + reader.ReadToEnd();
}
}
}
catch (Exception ex)
{
textBox1.Text = ex.Message;
}
}
txtMethod.Text
là một hộp văn bản nơi tôi đang gõ tên phương thức. Khi có 403, một ngoại lệ được ném vào khối bắt.
Cache_test.jsp chứa:
<%
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma","no-cache");
out.print("Method used was: "+request.getMethod());
%>
HttpWebRequest
sẽ không nhận biết và chuyển đổi các phương thức HTTP tiêu chuẩn thành chữ hoa. Ngoài ra, nó được ghi nhận là chỉ cho phép các phương thức HTTP tiêu chuẩn. Tùy chọn tốt nhất là sử dụng luồng TCP thô (ví dụ: trong netcat hoặc PuTTY raw hoặc telnet, v.v.).