الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

يا خبراء servlet filter

بدأه Web Crawler في 24 أبريل 2011 · 16 رد · 963 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

ارجو مساعدتي في الفكره التاليه

يا جماعه انا اريد عمل فورم بسيطه جدا يعني تاخذ الاسم من المستخدم و البريد الالكتروني و بعد ذلك يضغط المستخدم على زر ارسال فتترسل الفورم

الذي اريده هو كيف اجعل ا ل servlet Filter يقوم بالتشيك على مدخلات الفورم بحيث انه هذه الفورم لا تحتوي على كود يحتوي على هجوم XSS

الذي فقط اريده اين اضع الServlet Filter ؟ يعني انا الان عملت الفورم البسطه ولكن فين اضع الفلتر دا ؟؟؟؟؟؟؟؟؟؟؟؟؟

ارجو الايضاح بارك الله فيكم

#2

قم بإنشاء ال Filter كأي Filter ..

مثال:

package com.me;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * Servlet Filter implementation class XSSFilter
 */
public class XSSFilter implements Filter {

    /**
     * Default constructor. 
     */
    public XSSFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here

		// pass the request along the filter chain
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

و في داخل web.xml .. ضع هذا الكود :

	<filter>
		<display-name>XSSFilter</display-name>
		<filter-name>XSSFilter</filter-name>
		<filter-class>com.me.XSSFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>XSSFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>ERROR</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>
#3

بارك الله فيك و لكن سؤال : انا الان عملت الفورم و عندما يضغط المستخدم على زر ارسال , جميع محتويات الفورم تكون داخل الارقيومنت الذي اسمه request , هذا الارقيومنت يكون داخل ميثود اسمها doFillter

انا لا اعرف كيف اجعل هذا الارقيومنت request يكون فيه محتوى هذا الفورم ؟؟ لا اعرف كيف اشبك الفورم نفسها بالفلتر

هل سؤالي واضح

اسأل الله لك الفردوس الاعلى من الجنة

#4

انت تجعل المحتويات في فورم : post مثلا .. "داخل وسمي form"

الـ action او الهدف راح يكون محمي بالفلتر اللي انت مسويه من خلال ملف web.xml

<url-pattern>/*</url-pattern>

أرجو أن يكون فهمي لسؤالك صحيح :happy:

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#5

يا أخى .. الكود الذي وضعته بالأعلى يقوم بتشبيك أي فوم في البرنامج بال Filter الموجود بالأعلى

للحصول على معلومات الطلب:

غير الداله doFilter لتصبح كالتالى:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here

		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		Map<String, String[]> paramMap = httpServletRequest.getParameterMap();

		for (String key : paramMap.keySet())
		{
			System.out.print("param : " + key + "\t values >> ");
			String[] vals =  paramMap.get(key);
			for (String s : vals)
			{
				System.out.print(s + ", ");
			}
			System.out.println();
		}

		// pass the request along the filter chain
		chain.doFilter(request, response);
	}
1
#6

اخي العزيز جزاك الله خيرااا

الان انا انشأت صفحه html عاديه فيها فورم

<form method="POST" action="XSSFilter">
			<label for="name">Enter your name </label>
			<input type="text" id="name" name="name"/><br><br>
			<input type="submit" value="Submit Form"/>
			<input type="reset" value="Reset Form"/>
		</form>

هل صحيح اني اضع داخل action اسم الفلتر !!! ؟

#8

اخوي هويدي شكرا لك ... ظهرت عندي مشكله و انا اعمل رن ( علما انني استخدم النت بيز )

المشكله عندما اعمل رن للويب ابليكيشن يعطيني هذا الخطا :

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException

note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.0.1 logs.

ارفقت الصوره للمشكله التي تظهر لي على المتصفح

ارجو ان تدلني على الحل فقد بحث في الانترنت عن المشكله ولكن دون جدوى

post-236366-055255500 1303732828_thumb.p

المرفقات
problem.png
#9

غالبا توجد مشكله عندك بالكود ...

إنظر في ال logs ..

في Eclipse .. قم بنسخ النص الموجود بال Console و إطبعه هنا ..

#10

كود login :

<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
  <form action="src\java\WelcomeServlet">
			<table>
				<tr>
					<td>User Name</td>
					<td><input type="text" name="username"/></td>
				</tr>
				<tr>
					<td>Password</td>
					<td><input type="password" name="password"/></td>
				</tr>
				<tr>
					<td></td>
					<td><input type="submit" value="Submit"/></td>
				</tr>
			</table>
		</form>
  </body>
</html>

كود MyFilter :

import java.util.*;
import java.io.*;
import javax.servlet.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class MyFilter implements Filter {
	private FilterConfig filterConfig = null;
	public void init(FilterConfig filterConfig) {
		this.filterConfig = filterConfig;
	}
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
		// Get the password entered by the user.
		String password = ((HttpServletRequest) req).getParameter("password");
		// Check whether it matches with the desired password.
		if(password.equals("mypassword")) {
			long start = System.currentTimeMillis();
			String address =  req.getRemoteAddr();
			String file = ((HttpServletRequest) req).getRequestURI();
			// Pass control to the WelcomeServlet's service() method
			chain.doFilter(req, res);

			// After returning the control back to the filter, log user ip, resource uri and time used .
			filterConfig.getServletContext().log(" User IP: " + address + " Resource: " + file + " Milliseconds used: " + (System.currentTimeMillis() - start) );
		}
		else {
			// If password doesn't match then send the page informing incorrect password.
			res.setContentType("text/html");
			PrintWriter pw = res.getWriter();
			pw.println("<html>");
			pw.println("<head><title>Wrong Password</title></head>");
			pw.println("<body>");
			pw.println("<h3>Sorry, the password was incorrect.</h3>");
			pw.println("</body>");
			pw.println("</html>");
		}
	}
	public void destroy() { }

}

كود WelcomeServlet :

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class WelcomeServlet extends HttpServlet {
    @Override
	public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		res.setContentType("text/html");
		PrintWriter out = res.getWriter();
		String username = req.getParameter("username");
		out.println("<html><body>Welcome : <b>"+username+"<br/><br/>");
		out.println(new Date().toString());
		out.println("</b></body></html>");
	}
}

كود xml :

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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">
    <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
       <servlet-name>WelcomeServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet>
		<servlet-name>WelcomeServlet</servlet-name>
		<servlet-class>WelcomeServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>WelcomeServlet</servlet-name>
		<url-pattern>/WelcomeServlet</url-pattern>
	</servlet-mapping>	
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>
#11

مبديئا غير ال action ل WelcomeServlet فقط ..

لكن دعنى أجرب

#12

الحمد لله زبط معاي ولكن بشكل اخر انو نقلت WelcomeServlet في نفس مجلد الويب و ايضا حذفت xml كلها

ولكن سؤال ماهي فائدة ال xml التي اكتبها ممكن توضح لي ؟

#14
اقتباس
الحمد لله زبط معاي ولكن بشكل اخر انو نقلت WelcomeServlet في نفس مجلد الويب و ايضا حذفت xml كلها

لا أدري عن ماذا تتحدث .. قم بإتباع الخطوات بالمثال الذي بالأعلى ..

#15

اخوي هويدي جزاك الله خير انك لم تقصر معي و ساعدتني الله يساعدك مثل ما ساعدتني

ولكن يبقى سؤال السيرفير اللي استخدمه اسمه glass fish

كل ما اعلم رن يطلع لي صفحة اللوقن و اول ما اضغط login

يعرض لي صفحة خطأ و هيه :

type Status report

message

descriptionThe requested resource () is not available.

؟؟؟ ما السبب

#16

السبب هو التالي:

اقتباس
الحمد لله زبط معاي ولكن بشكل اخر انو نقلت WelcomeServlet في نفس مجلد الويب و ايضا حذفت xml كلها

هل إتبعت الخطوات الموجوده هنا؟

/index.php?showtopic=220541

#17

اخوي هويدي جزاك الله الف خير و كثر الله من امثالك

مواضيع مشابهة