المشاركات : 7,361
المواضيع 801
الإنتساب : Sep 2013
السمعة :
860
الشكر: 13200
تم شكره 18717 مرات في 4381 مشاركات
03-11-21, 11:08 AM
(آخر تعديل لهذه المشاركة : 13-11-21, 11:00 PM {2} بواسطة سعود.)
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله و بركاته
وايضا تنفع مع الويب
من مهتم لعمل كم صفحة نقاش وتفاعل ويتم تخزين المشاركات في ملف نصي؟
ولحماية الملف النصي نستبدل اللاحقة بامتداد .config
ليقوم السيرفر بحماية الملف من القراءة من المتصفح.
HtmlAgilityPack
جربت الفكرة بسيرفر فيجوال استوديو وتم الامر بشكل ممتاز
من يهمه الامر يكتب رد
شكر الله لكم جميعا
المشاركات : 7,361
المواضيع 801
الإنتساب : Sep 2013
السمعة :
860
الشكر: 13200
تم شكره 18717 مرات في 4381 مشاركات
صفحة الماستر بيج
العمل سيكون ببطء حسب المزاااج
التجربة ستكون محليا فقط وعند الانتهاء باذن الله تعالى اجربها على الاستضافة هنا
انتظرونا ببطء
المشاركات : 7,361
المواضيع 801
الإنتساب : Sep 2013
السمعة :
860
الشكر: 13200
تم شكره 18717 مرات في 4381 مشاركات
04-11-21, 04:32 AM
(آخر تعديل لهذه المشاركة : 04-11-21, 04:55 AM {2} بواسطة سعود.)
لاول مرة في حياتي ابرمج بالجافاسكريبت ووقعت بعقبات!!!
اذا كانت الصفحة تابعة للماستر بيج لايتم التعامل مع الجافاسكريبت نهائيا وكانها غير موجودة!!!
(04-11-21, 04:32 AM)سعود كتب : لاول مرة في حياتي ابرمج بالجافاسكريبت ووقعت بعقبات!!!
اذا كانت الصفحة تابعة للماستر بيج لايتم التعامل مع الجافاسكريبت نهائيا وكانها غير موجودة!!!
الوضع بسيط كانت المشكلة هي عدم تفريقي بين الصفحة المربوطة وغير المربوطة وايضا مكان وضع السكريبت حيث يجب وضعه في ContentPlaceHolderID="head"
وايضا التعريفات يجب ان تكون هكذا
PHP كود :
var tuser = document.getElementById("<%=Txtusername.ClientID%>");
والباقي عاادي.
المشاركات : 7,361
المواضيع 801
الإنتساب : Sep 2013
السمعة :
860
الشكر: 13200
تم شكره 18717 مرات في 4381 مشاركات
04-11-21, 11:03 PM
(آخر تعديل لهذه المشاركة : 04-11-21, 11:37 PM {2} بواسطة سعود.)
تم الانتهاء من صفحة الـdefault و صفحة تسجيل الدخول بمميزات واشتراطات عدة وكذلك تسجيل عضوية ولا زال الوقت مبكر
تحياتي للجميع.
جملة تسجيل عضوية جديدة
كود :
Dim n As String = "<user id=" & GetId() & " name=" & txtusername.Text & " pass=" & txtpassword.Text & " mail=" & txtemail.Text & " ip=" & myip() & " date='" & Now.ToString & "' act='false' blocked='false' cpuid='" & CpuId() & "' />"
هذا سطر اولي لاسناد القيم
فقط انتظروا هذا ليس كل شيء
HtmlAgilityPack
هذه الاداة هي اللتي تجعل السطر فعال
........
التالي صفحة كود الاضافة بشكل كامل
PHP كود :
Public Class WebForm5 Inherits System.Web.UI.Page Dim doc As HtmlAgilityPack.HtmlDocument Dim fl As String = Server.MapPath("~\pages\usersfile.config")
Protected Function myip() As String Dim sIPAddress As Object sIPAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR") If sIPAddress = "" Then sIPAddress = Request.ServerVariables("REMOTE_ADDR") Return sIPAddress End Function
Protected Function Namefound(ByVal un As String) As Boolean If Not IsNothing(doc.DocumentNode.SelectNodes("//user[@name='" & un & "']")) Then Return True Else Return False End If End Function Protected Function Mailfound(ByVal un As String) As Boolean If Not IsNothing(doc.DocumentNode.SelectNodes("//user[@mail='" & un & "']")) Then Return True Else Return False End If End Function
Protected Function Isok(ByVal un As String, ByVal ps As String) As Boolean If Not IsNothing(doc.DocumentNode.SelectNodes("//user[@name='" & un & "' and @pass='" & ps & "']")) Then Return True Else Return False End If End Function
Protected Function GetId() As Integer If Not IsNothing(doc.DocumentNode.SelectNodes("//user")) Then Dim ucount As Integer = doc.DocumentNode.SelectNodes("//user").Count Dim icount As Integer icount = doc.DocumentNode.SelectNodes("//user")(ucount - 1).Attributes("id").Value Return icount + 1 Else Return 1 End If End Function
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load doc = New HtmlAgilityPack.HtmlDocument doc.Load(fl) End Sub
Protected Sub btnadd_Click(sender As Object, e As EventArgs) Handles btnadd.Click If Namefound(txtusername.Text) Then lblmsg.Text = "الاسم محجوز" Exit Sub End If
If Mailfound(txtemail.Text) Then lblmsg.Text = "الايميل محجوز" Exit Sub End If
Dim n As String = "<user id=" & GetId() & " name=" & txtusername.Text & " pass=" & txtpassword.Text & " mail=" & txtemail.Text & " ip=" & myip() & " date='" & Now.ToString & "' act='false' blocked='false' cpuid='" & CpuId() & "' />" Dim br As HtmlAgilityPack.HtmlNode = HtmlAgilityPack.HtmlNode.CreateNode(vbCrLf) If GetId() = 0 Then doc.DocumentNode.AppendChild(br) End If
doc.DocumentNode.AppendChild(newChild:=HtmlAgilityPack.HtmlNode.CreateNode(n)) doc.DocumentNode.AppendChild(br) doc.Save(fl) Response.Redirect("~\login.aspx") End Sub End Class
والتالي صفحة الدخول
PHP كود :
Public Class WebForm4 Inherits System.Web.UI.Page Dim doc As HtmlAgilityPack.HtmlDocument Dim fl As String = Server.MapPath("~\pages\usersfile.config") Protected Function Isok(ByVal un As String, ByVal ps As String) As Boolean If Not IsNothing(doc.DocumentNode.SelectNodes("//user[@name='" & un & "' and @pass='" & ps & "']")) Then Return True Else Return False End If End Function Protected Function IsActive(ByVal un As String) As Boolean If Not IsNothing(doc.DocumentNode.SelectNodes("//user[@name='" & un & "' and @act='true']")) Then Return True Else Return False End If End Function Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsNothing(Session("user")) Then Response.Redirect("~\default.aspx") End If doc = New HtmlAgilityPack.HtmlDocument doc.Load(fl) End Sub Protected Sub btnlogin_Click(sender As Object, e As EventArgs) Handles Btnlogin.Click, Btnlogin.Click, Btnlogin.Click, Btnlogin.Click, Btnlogin.Click, Btnlogin.Click, Btnlogin.Click, Btnlogin.Click, Btnlogin.Click If Isok(Txtusername.Text, Txtpassword.Text) Then Session("user") = Txtusername.Text If IsActive(Txtusername.Text) = False Then Lblmsg.Text = "لم يتم تنشيط حسابك ... يبدو انك لم تنقر رابط التنشيط المرسل الى بريدك" Else Response.Redirect("~\default.aspx") End If Else Lblmsg.ForeColor = Drawing.Color.White Lblmsg.Text = "لم نعثر على بيانات مطابقة لما كتبت" End If End Sub End Class
دققوا كيف يتم ربط المنتدى بالقسم
forum qid=qesm id
وبنفس الطريقة المواضيع وردودها
صفحة الـ default.aspx الرئيسية تقوم بجلب الاقسام الرئيسية وكل قسم عبارة عن كونتول مخصص ايضا يحتضن الفروع من المنتديات
PHP كود :
Public Class WebForm1 Inherits System.Web.UI.Page Dim fl As String = Server.MapPath("~\pages\aqsam.config") Dim doc As HtmlAgilityPack.HtmlDocument Protected Sub gd() doc = New HtmlAgilityPack.HtmlDocument doc.Load(fl) fq = fl If Not IsNothing(doc.DocumentNode.SelectNodes("//qesm")) Then Dim qcount As Integer = doc.DocumentNode.SelectNodes("//qesm").Count For i As Integer = 0 To qcount - 1 Dim q As qesm = CType(LoadControl("~\pages\qesm.ascx"), qesm) q.qd.Text = doc.DocumentNode.SelectNodes("//qesm")(i).Attributes("id").Value q.hL.Text = doc.DocumentNode.SelectNodes("//qesm")(i).Attributes("name").Value q.Ldesc.Text = doc.DocumentNode.SelectNodes("//qesm")(i).Attributes("qdesc").Value q.hL.NavigateUrl = "~\theqesm.aspx?qid=" & q.qd.Text & "&qname=" & q.hL.Text & "&qdesc=" & q.Ldesc.Text aqsams.Controls.Add(q) Next End If End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load gd() End Sub End Class
والتالي كود عنصر التحكم الخاص بالاقسام وكيف هو ايضا يحتضن المنتديات
PHP كود :
Public Class qesm Inherits System.Web.UI.UserControl Dim doc As HtmlAgilityPack.HtmlDocument Protected Sub gd() doc = New HtmlAgilityPack.HtmlDocument doc.Load(fq) If Not IsNothing(doc.DocumentNode.SelectNodes("//forum")) Then Dim fcount As Integer = doc.DocumentNode.SelectNodes("//forum[@qid='" & Lid.Text & "']").Count For i As Integer = 0 To fcount - 1 Dim q As forum = CType(LoadControl("~\pages\forum.ascx"), forum) q.hL.Text = doc.DocumentNode.SelectNodes("//forum[@qid='" & Lid.Text & "']")(i).Attributes("name").Value q.Ldesc.Text = doc.DocumentNode.SelectNodes("//forum[@qid='" & Lid.Text & "']")(i).Attributes("fdesc").Value q.ffd.Text = doc.DocumentNode.SelectNodes("//forum[@qid='" & Lid.Text & "']")(i).Attributes("id").Value q.hL.NavigateUrl = "~\theforum.aspx?fid=" & q.ffd.Text & "&fname=" & q.hL.Text & "&fdesc=" & q.Ldesc.Text pnlforums.Controls.Add(q) Next End If End Sub Public Property hL As HyperLink Get Return hlt End Get Set(ByVal hlt As HyperLink) hL = hlt End Set End Property Public Property Ldesc As Label Get Return lbdesc End Get Set(ByVal lbdesc As Label) Ldesc = lbdesc End Set End Property Public Property qd As Label Get Return Lid End Get Set(ByVal lid As Label) qd = lid End Set End Property Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load gd() End Sub End Class
التالي عنصر تحكم الـ forum لكنه غير كامل وانما فقط الان تعميم خصائص الادوات
PHP كود :
Public Class forum Inherits System.Web.UI.UserControl Public Property hL As HyperLink Get Return hlt End Get Set(ByVal hlt As HyperLink) hL = hlt End Set End Property Public Property Ldesc As Label Get Return lbdesc End Get Set(ByVal lbdesc As Label) Ldesc = lbdesc End Set End Property Public Property Ld As Label Get Return lrdod End Get Set(ByVal lrdod As Label) Ld = lrdod End Set End Property Public Property ffd As Label Get Return fd End Get Set(ByVal fd As Label) ffd = fd End Set End Property End Class
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
في عنصر التحكم واجهت مشكلة عدم الامكانية للوصول الـ server.mapPath فلجات الى بعد الله الى تعريف متغير عمومي بموديول واسند له في صفحة عادية واستخدمها في هذا العنصر.
تصور لم استخدم اي قاعدة بيانات لا أكسس و لا sqlserver
!!!
تجاربي مع الفكرة في السيرفر المحلي Localhost والامور جيدة لكن يتبقى الاستضافة لها شؤون اخرى قد تمنع او تقيد الله اعلم لكن حتى يتبين كل شيء ساظل اجرب محليا ان شاء الله تعالى.
المشاركات : 2,061
المواضيع 49
الإنتساب : Oct 2017
السمعة :
537
الشكر: 10647
تم شكره 5309 مرات في 2095 مشاركات
السلام عليكم ورحمة الله وبركاته
اخي الغالي سعود .. لك كل الحب والاحترام
عندما لا ارى تجاربك البرمجية الجديدة في المنتدى ينسل الكسل والخمول الي وأحس انني محبط
ولكن مع كل مشاركة جديدة لك اجد شيئا اتابعه وبذلك تنشط همتي ويزداد حماسي ايضا
والامر نفسه مع باقي تجارب الاخوة الاعضاء والتي بمجموعها تدب الحركة والنشاط في منتدانا الجميل
دمت بخير ودامت همتك عالية بإذن الله
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
المشاركات : 476
المواضيع 33
الإنتساب : Mar 2014
السمعة :
174
الشكر: 366
تم شكره 1388 مرات في 471 مشاركات
أخي سعود بارك الله فيك وأعانك ووفقك
موضوعك يشجع على التجربة فعلا وعلى تعلم اشياء جديدة
ملاحظة صغيرة جدا رأيت في الكود اللذي ذكرته في المشاركة & txtusername.Text & وهو من الممكن ان يستخدم للحقن داخل كود الصفحة اذا ادخل المستخدم مثلا نصا برمجيا في ال txtusername مثل ما يحدث في ال SQL Injection
لا اعلم على وجه التحديد ما هو الحل ولكني اعلم انه يجب تحصين وفلترة مدخلات المستخدم
وبارك الله فيك حرصك على مشاركة هذا الجهد معنا
المشاركات : 7,361
المواضيع 801
الإنتساب : Sep 2013
السمعة :
860
الشكر: 13200
تم شكره 18717 مرات في 4381 مشاركات
(05-11-21, 12:19 AM)ابراهيم ايبو كتب : السلام عليكم ورحمة الله وبركاته
اخي الغالي سعود .. لك كل الحب والاحترام
عندما لا ارى تجاربك البرمجية الجديدة في المنتدى ينسل الكسل والخمول الي وأحس انني محبط
ولكن مع كل مشاركة جديدة لك اجد شيئا اتابعه وبذلك تنشط همتي ويزداد حماسي ايضا
والامر نفسه مع باقي تجارب الاخوة الاعضاء والتي بمجموعها تدب الحركة والنشاط في منتدانا الجميل
دمت بخير ودامت همتك عالية بإذن الله
الله يسعدك ويوفقك دنيا وآخرة اسعدني مرورك
(05-11-21, 01:46 AM)Anas Mahmoud كتب : أخي سعود بارك الله فيك وأعانك ووفقك
موضوعك يشجع على التجربة فعلا وعلى تعلم اشياء جديدة
ملاحظة صغيرة جدا رأيت في الكود اللذي ذكرته في المشاركة & txtusername.Text & وهو من الممكن ان يستخدم للحقن داخل كود الصفحة اذا ادخل المستخدم مثلا نصا برمجيا في ال txtusername مثل ما يحدث في ال SQL Injection
لا اعلم على وجه التحديد ما هو الحل ولكني اعلم انه يجب تحصين وفلترة مدخلات المستخدم
وبارك الله فيك حرصك على مشاركة هذا الجهد معنا
بارك الله فيك اخانا الكريم.
بصراحة لم افطن لهذا.
لكن انا استخدم الملف HtmlAgilityPack هل يمكن ان يعطي نتائج خاطئة بناءا على نص معين؟
سنجرب باذن الله ونشوف.
شكر الله لك زيارتك للموضوع واللذي اسعدني.
بارك الله فيكم جميعا.
المشاركات : 7,361
المواضيع 801
الإنتساب : Sep 2013
السمعة :
860
الشكر: 13200
تم شكره 18717 مرات في 4381 مشاركات
بصدد انهاء التحكم بالاقسام
المشاركات : 2,061
المواضيع 49
الإنتساب : Oct 2017
السمعة :
537
الشكر: 10647
تم شكره 5309 مرات في 2095 مشاركات
05-11-21, 11:20 PM
(آخر تعديل لهذه المشاركة : 06-11-21, 12:38 AM {2} بواسطة ابراهيم ايبو.)
السلام عليكم ورحمة الله وبركاته
بارك الله بكم وبمشاركاتكم
من اجل حل مشكلة Sql Injection هناك طريقة استخدمها في حال لم استخدم الباراميترات وهي بسيطة جدا بان استبدل اي سنكل كوتيشن يمكن ان يدخله المستخدم بلاشيئ وبهذا يتعطل النص البرمجي الممكن ادخاله بغية الأذية
بهذا الشكل :
كود :
txtusername.Text.Replace("'", "")
هذا مع قواعد البيانات اما مع الملفات النصية فأعتقد بما ان المدخل من خلال التكست بوكس ستتعطل Injection بتعطيل السنكل كوتيشن
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
المشاركات : 84
المواضيع 11
الإنتساب : Jan 2020
السمعة :
6
الشكر: 4
تم شكره 88 مرات في 45 مشاركات
السلام عليكم ، طيب
هذه المحاولة سوف تفيدك في تعلم التعامل مع الملفات النصية والمجلدات والمسارات للملفات ..
ولكن ربما هي في الواقع هروب من التعامل مع قواعد البيانات او على الاقل تأجيلها ... اقول ربما ، واما عن نفسي فقد تهربت فعلا من التعامل مع قواعد البيانات حين بدأت بالبي اج بي بحدود عام 2002 ، ولجأت وقتها الى استخدام الملفات النصية في انشاء وبرمجة أول مدونة لي بالبي اج بي ، وبعد ذلك ندمت لاني انما اخرت تعلم قواعد البيانات فسبقني الاخرون وتأخرت انا ...
|