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

إلغاء القيود المفروضة على ال applets

بدأه herch في 14 يونيو 2010 · 15 رد · 2,297 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إلغاء القيود المفروضة على ال applets

السلام عليكم

عند تشغيل applet ما داخل المتصفح، فإنه يشتغل داخل إطار أمني محدد، حيث يمكن لل applet القيام ببعض العمليات فقط، بينما لا يستطيع القيام بعمليات أخرى، مثل الوصول إلى ملفات المستخدم، أو فتح إتصال مع جهاز آخر مع الشبكة (ما عدا الجهاز الذي تم تحميل ال applet منه).

لتجاوز هذه القيود، يمكن إضافة signature للأرشيف jar الذي يحتوي عى الapplet.

توليد مفتاح خاص باستعمال الأداة keytool

هذه الأداة تقوم بتوليد المفتاح الخاص private key الذي سنستعمله عند عمل signing للأرشيف jar. يتم تخزين هذا المفتاح في ملف يسمى keystore.

الأداة keytool تمتلك عدة أوامر، لكننا سنستعمل أمرا واحدا، وهو الخاص بتوليد المفتاح : genkey-

هذا الأمر ينتظر العديد من الخيارات، من بينها:

-alias: إسم المفتاح

-validity: مدة اعتماد المفتاح

-keystore: مسار الملف الذي سيتم فيه تخزين المفتاح

مثلا، السطر التالي

keytool -genkey -alias herch -validity 365

يقوم بتوليد مفتاح بإسم "herch"، ومدة صلاحيته تمتد لسنة كاملة. بما أننا لم نحدد مكان ال keystore، فإن الأداة ستستخدم المسار الإفتراضي، أي ملف بإسم "keystore." داخل المجلد الخاص بالمستخدم.

عند تنفيد الأمر أعلاه، يقوم البرنامج أولا بطلب كلمة السر بالنسبة لل keystore (سيتم طلب كلمة السر هذه عند عمل ال signing)، ثم بطرح بعض الأسئلة، مثل الإسم والعنوان ...، كما يظهر في الصورة ( الأسئلة بالفرنسية لأن لغة النظام عندي هي الفرنسية)

post-181903-057827400 1276545603_thumb.p

الأداة jarsigner

بعد أن قمنا بتوليد المفتاح، سنقوم بإضافة إمضاء signature إلى الأرشيف jar الذي يحتوي على ال applet، وذلك باستعمال الأداة jarsigner.

هذه الأداة تقبل عدة خيارات، لكن هناك خياران إجباريان فقط، وهما إسم الأرشيف jar الذي سنطبق عليه الإمضاء، وإسم المفتاح الذي نريد استعماله.

jarsigner myAppletJar.jar herch

في الأمر السابق، نقوم بإضافة إمضاء إلى الأرشيف myAppletJar.jar باستعمال المفتاح "herch". إذا كنتم تتساءلون عن مصدر الإسم، فهو نفس الإسم الذي مررناه للأداة keytool بعد الخيار alias.

مثال

سنقوم بتشغيل applet بسيط يقوم بمحاولة فتح ملف عند المستعمل، ونرى تصرفه فيل إضافة الإمضاء وبعده.

ال applet

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * NewJApplet.java
 *
 * Created on 14 juin 2010, 20:17:24
 */

/**
 *
 * @author issam
 */
public class NewJApplet extends javax.swing.JApplet {

	/** Initializes the applet NewJApplet */
	public void init() {
    	try {
        	java.awt.EventQueue.invokeAndWait(new Runnable() {
            	public void run() {
                	initComponents();
            	}
        	});
    	} catch (Exception ex) {
        	JOptionPane.showMessageDialog(rootPane, ex.getMessage());
    	}
	}

	/** This method is called from within the init() method to
 	* initialize the form.
 	* WARNING: Do NOT modify this code. The content of this method is
 	* always regenerated by the Form Editor.
 	*/
	@SuppressWarnings("unchecked")
	// <editor-fold defaultstate="collapsed" desc="Generated Code">
	private void initComponents() {

    	btnOpenFile = new javax.swing.JButton();

    	btnOpenFile.setText("Open a file");
    	btnOpenFile.addActionListener(new java.awt.event.ActionListener() {
        	public void actionPerformed(java.awt.event.ActionEvent evt) {
            	btnOpenFileActionPerformed(evt);
        	}
    	});

    	javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    	getContentPane().setLayout(layout);
    	layout.setHorizontalGroup(
        	layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        	.addGroup(layout.createSequentialGroup()
            	.addContainerGap()
            	.addComponent(btnOpenFile, javax.swing.GroupLayout.PREFERRED_SIZE, 189, javax.swing.GroupLayout.PREFERRED_SIZE)
            	.addContainerGap(20, Short.MAX_VALUE))
    	);
    	layout.setVerticalGroup(
        	layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        	.addGroup(layout.createSequentialGroup()
            	.addContainerGap()
            	.addComponent(btnOpenFile)
            	.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    	);
	}// </editor-fold>

	private void btnOpenFileActionPerformed(java.awt.event.ActionEvent evt) {
		File file = null;
		JFileChooser chooser = new JFileChooser();
		int result = chooser.showOpenDialog(this);
		if (result == JFileChooser.APPROVE_OPTION) {
			try {
				file = chooser.getSelectedFile();
				Desktop.getDesktop().open(file);
			} catch (IOException ex) {
				JOptionPane.showMessageDialog(rootPane, ex.getMessage());
			}
		}
	}


	// Variables declaration - do not modify
	private javax.swing.JButton btnOpenFile;
	// End of variables declaration

}

أغلب الكود هو فقط لبناء الواجهة. الكود الذي يهمنا هو الموجود داخل btnOpenFileActionPerformed، حبث نريد الوصول إلى ملفات المستخدم.

الصفحة html

<html>
  <head>
	<title></title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
  	<applet code="NewJApplet" archive="SigningApplet.jar"></applet>
  </body>
</html>

عند تشغيل الصفحة، والضغط على الزر، لا شيء يحدث، أو بالأحرى ما يحدث هو أنه يتم رفع استثناء:

java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read)

نقوم بعد ذلك بعمل signing للأرشيف، باستعمال الأمر التالي

jarsigner SigningApplet.jar herch

طبعا هنا استعملت المفتاح الذي أنشأته سابقا.

الأن، عند تشغيل ال applet، ستظهر لنا نافذة مثل التي في الصورة، تسأل المستخدم هل يريد تنفيد البرنامج أم لا.

post-181903-069586100 1276545614_thumb.p

وعند القبول، يصبح لل applet الحق في الوصول إلى الملفات الموجودة في الجهاز.

روابط مفيدة

Creating a Trusted Applet with Local File System Access Rights

Signing and Verifying JAR Files

keytool

jarsigner

المشروع (netbeans) في المرفقات

That's all folks smile.gif

SigningApplet.zip

المرفقات
img1.pngimg2.png
9 −1
#2

السلام عليكم...

شكرا لك على موضوعك الجميل. عندي سؤال: عند عمل Applet قابله للسحب الى سطح المكتب، هل عند سحبها الى سطح المكتب ستلغى القيود عنها تلقائيا أم يجب أن نتبع الخطوات التي ذكرتها في كلا الحالتين؟

1 −1
#3

أظن أن خاصية السحب لسطح المكتب خاصة فقط ببرامج ال JavaFX، التي تمتلك runtime خاص بها، بخلاف ال applets العادية التي تشتغل فقط في المتصفح... لكن لست متأكدا 100%

1 −1
#4

موضوع مميز من شخص مميز

شكرا لك

#5

تسجيل حضور للترحيب بمشرفنا القدير عصام .. عدت عزيزي والعود أحمد نتمى أن تتواصل معنا في هذا القسم .. فوجود اسمك يبعثني دائماً على التفائل والتواجد والاستمتاع بقراءه مواضيعة الرائعة في هذا القسم

لاخلا ولاعدم

2
#6

شكرا اخىherch

مرحب بعودتك اخى الكريم

00020309t.gif

1958_1963.gif
#7

شكرا لك اخى الكريم عصام

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

وحمدلله بسلامه العودة

Software Developer
Mahmoudkelany.com


 

#8
herch كتب:

أظن أن خاصية السحب لسطح المكتب خاصة فقط ببرامج ال JavaFX، التي تمتلك runtime خاص بها، بخلاف ال applets العادية التي تشتغل فقط في المتصفح... لكن لست متأكدا 100%

قامت شركة Sun او oracle الان باضافة هذه الميزة الى ال Applets الخاصة ب j2se

وفى هذه الحالة يخضع ال applet الى نفس القيود ولا يتحرر منها الا باضافة التوقيع

انظر هذا الرابط http://java.sun.com/...ableApplet.html

ويتم دعم هذه الخاصية بمجرد اضافة parameter واسمه draggable واعطاؤه القيمة true

<applet>
<param name="draggable" value="true" />
</applet>

ويتم سحب ال applet خارج المتصفح بالضغط على زر Alt مع الضغط بزر الفارة الايسر على اى مكان فى ال applet مع السحب الى اى مكان حتى لو فى نفس الصفحة

تحياتى

تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 16 يونيو 2010 في 21:16

2


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#9

موضوع جميل

واهلا و سهلا بك من جديد

والله افتقدناك و افتقدنا مواضيع

لكن الا يوجد هنالك ضوابط لتكوين signature

حيث انت تعلم ان المستخدم دائما يختار Allow او Yes في صناديق الحوارات

فهل هذه الاداة ستكوّن ثغرة امنية في المتصفحات ؟؟

#10
Mohammed Mshari Ersan كتب:

حيث انت تعلم ان المستخدم دائما يختار Allow او Yes في صناديق الحوارات

تقصد المستخدم الجاهل laugh.gif

أظن انه يمكن حل هذه المشكلة بمجرد تحذير المستخدم من مثل هذه الرسالة

ولكن ننتظر رد الأخوة ربما نجد من لديه حل أفضل

تحياتى

تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 15 يونيو 2010 في 12:24


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#11

سلام عليكم..

أولا شكراً علي الموضوع .. لي عوده بعد الانتهاء من الامتحانات لانهاء قرائته

ولكن عندي سؤال .. لماذا التحايل :lol:

هل هو الهروب من تعلم تكنولوجيا جديدة مثل الـ java FX والتي تفي بالغرض واكثر وبقوه اكبر

اعتقد ان استخدام الـ java Applet شح كثيرا بعد ظهور الـ RIA technologies من vendors كثيرة

صــفــر

#12
MOHAMED FATHEI كتب:

تقصد المستخدم الجاهل laugh.gif

أظن انه يمكن حل هذه المشكلة بمجرد تحذير المستخدم من مثل هذه الرسالة

ولكن ننتظر رد الأخوة ربما نجد من لديه حل أفضل

تحياتى

لا صدقا

معظم المستخدمين لا يعرفون ماهية التحذيرات و ماهية خطورتها

و قد يبدو له امر تشغيلي لا اكثر

و تعود الا تقيس الامور على نفسك

فانت مبرمج

#13
cIs.Falcon كتب:

سلام عليكم..

أولا شكراً علي الموضوع .. لي عوده بعد الانتهاء من الامتحانات لانهاء قرائته

ولكن عندي سؤال .. لماذا التحايل :lol:

هل هو الهروب من تعلم تكنولوجيا جديدة مثل الـ java FX والتي تفي بالغرض واكثر وبقوه اكبر

اعتقد ان استخدام الـ java Applet شح كثيرا بعد ظهور الـ RIA technologies من vendors كثيرة

ليس هروب من التكنولوجيا

ولكن نحن مازلنا فى مرحلة التعلم ل j2se واظن ان java fx تقنية مختلفة تماما

بالتأكيد سوف نتطرق اليها ونحاول الاحتكاك بها ولكن على الاقل ليس الان لحين اتقان j2se

Mohammed Mshari Ersan كتب:

لا صدقا

معظم المستخدمين لا يعرفون ماهية التحذيرات و ماهية خطورتها

و قد يبدو له امر تشغيلي لا اكثر

و تعود الا تقيس الامور على نفسك

فانت مبرمج

شكرا لك اخى محمد على لقب مبرمج هذا الذى أتمناه

والله حتى الان أعتبر نفسى مجرد مستخدم مثقف فقط sleep.gif


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#14
MOHAMED FATHEI كتب:

قامت شركة Sun او oracle الان باضافة هذه الميزة الى ال Applets الخاصة ب j2se

وفى هذه الحالة يخضع ال applet الى نفس القيود ولا يتحرر منها الا باضافة التوقيع

لم أكن أعلم بهذا الأمر. شكرا على المعلومة smile.gif.

Mohammed Mshari Ersan كتب:

لكن الا يوجد هنالك ضوابط لتكوين signature

حيث انت تعلم ان المستخدم دائما يختار Allow او Yes في صناديق الحوارات

فهل هذه الاداة ستكوّن ثغرة امنية في المتصفحات ؟؟

بل على العكس، فالرسالة تحذر من أن البرنامج غير موثوق به، وتسأل المستخدم هل يريد المتابعة. أظن أن المستخدم العادي سيفكر مرتين قبل الضغط على ز السماح.

لكن تبقى هناك إمكانية التحقق من الإمضاء عبر منظمات خاصة بهذا الأمر، ويكون مكتوبا في النافذة التي تظهر أنه تم التحقق من الإمضاء من طرف المنظمة الفلانية، لكن لا أعرف الكثير في هذا الموضوع.

خلاصة الأمر أن المستخدم يتحمل المسؤولية، فإن طرأ شيء، فهو الذي وافق على تشغيل البرنامج (ذنبه على جنبه laugh.gif)

cIs.Falcon كتب:

هل هو الهروب من تعلم تكنولوجيا جديدة مثل الـ java FX والتي تفي بالغرض واكثر وبقوه اكبر

اعتقد ان استخدام الـ java Applet شح كثيرا بعد ظهور الـ RIA technologies من vendors كثيرة

Java FX لغة مختلفة تماما، بينما في ال applet نستعمل لغة الجافا، ويمكن لا يكون لدى شخص ما الوقت لتعلم لغة جديدة فيستعمل ال applet ، و الواجهات في JavaFX لا تتيح كل إمكانيات ال Swing، بينما يمكننا استعمال الSwing في ال applet. (لم أقرأ شيئا عن JavaFX منذ فترة، ممكن تكون تطورت الأمور مع النسخة الجديدة)

وشكرا للجميع على الترحيب 046.gif

#15

jarsigner اين اجدها لم اجدها في bin الخاص بالجافا

#16

ابحث في ال bin الخاص بال JDK، ليس ال JRE

1

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