بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله و بركاته
وايضا تنفع مع الويب
من مهتم لعمل كم صفحة نقاش وتفاعل ويتم تخزين المشاركات في ملف نصي؟
ولحماية الملف النصي نستبدل اللاحقة بامتداد .config
ليقوم السيرفر بحماية الملف من القراءة من المتصفح.
HtmlAgilityPack
جربت الفكرة بسيرفر فيجوال استوديو وتم الامر بشكل ممتاز
من يهمه الامر يكتب رد
شكر الله لكم جميعا
صفحة الماستر بيج
العمل سيكون ببطء حسب المزاااج
التجربة ستكون محليا فقط وعند الانتهاء باذن الله تعالى اجربها على الاستضافة هنا
انتظرونا ببطء
لاول مرة في حياتي ابرمج بالجافاسكريبت ووقعت بعقبات!!!
اذا كانت الصفحة تابعة للماستر بيج لايتم التعامل مع الجافاسكريبت نهائيا وكانها غير موجودة!!!
(04-11-21, 04:32 AM)سعود كتب : [ -> ]لاول مرة في حياتي ابرمج بالجافاسكريبت ووقعت بعقبات!!!
اذا كانت الصفحة تابعة للماستر بيج لايتم التعامل مع الجافاسكريبت نهائيا وكانها غير موجودة!!!
الوضع بسيط كانت المشكلة هي عدم تفريقي بين الصفحة المربوطة وغير المربوطة وايضا مكان وضع السكريبت حيث يجب وضعه في ContentPlaceHolderID="head"
وايضا التعريفات يجب ان تكون هكذا
PHP كود :
var tuser = document.getElementById("<%=Txtusername.ClientID%>");
والباقي عاادي.
تم الانتهاء من صفحة الـ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 والامور جيدة لكن يتبقى الاستضافة لها شؤون اخرى قد تمنع او تقيد الله اعلم لكن حتى يتبين كل شيء ساظل اجرب محليا ان شاء الله تعالى.
السلام عليكم ورحمة الله وبركاته
اخي الغالي سعود .. لك كل الحب والاحترام
عندما لا ارى تجاربك البرمجية الجديدة في المنتدى ينسل الكسل والخمول الي وأحس انني محبط
ولكن مع كل مشاركة جديدة لك اجد شيئا اتابعه وبذلك تنشط همتي ويزداد حماسي ايضا
والامر نفسه مع باقي تجارب الاخوة الاعضاء والتي بمجموعها تدب الحركة والنشاط في منتدانا الجميل
دمت بخير ودامت همتك عالية بإذن الله
أخي سعود بارك الله فيك وأعانك ووفقك
موضوعك يشجع على التجربة فعلا وعلى تعلم اشياء جديدة
ملاحظة صغيرة جدا رأيت في الكود اللذي ذكرته في المشاركة & txtusername.Text & وهو من الممكن ان يستخدم للحقن داخل كود الصفحة اذا ادخل المستخدم مثلا نصا برمجيا في ال txtusername مثل ما يحدث في ال SQL Injection
لا اعلم على وجه التحديد ما هو الحل ولكني اعلم انه يجب تحصين وفلترة مدخلات المستخدم
وبارك الله فيك حرصك على مشاركة هذا الجهد معنا
(05-11-21, 12:19 AM)ابراهيم ايبو كتب : [ -> ]السلام عليكم ورحمة الله وبركاته
اخي الغالي سعود .. لك كل الحب والاحترام
عندما لا ارى تجاربك البرمجية الجديدة في المنتدى ينسل الكسل والخمول الي وأحس انني محبط
ولكن مع كل مشاركة جديدة لك اجد شيئا اتابعه وبذلك تنشط همتي ويزداد حماسي ايضا
والامر نفسه مع باقي تجارب الاخوة الاعضاء والتي بمجموعها تدب الحركة والنشاط في منتدانا الجميل
دمت بخير ودامت همتك عالية بإذن الله
الله يسعدك ويوفقك دنيا وآخرة اسعدني مرورك
(05-11-21, 01:46 AM)Anas Mahmoud كتب : [ -> ]أخي سعود بارك الله فيك وأعانك ووفقك
موضوعك يشجع على التجربة فعلا وعلى تعلم اشياء جديدة
ملاحظة صغيرة جدا رأيت في الكود اللذي ذكرته في المشاركة & txtusername.Text & وهو من الممكن ان يستخدم للحقن داخل كود الصفحة اذا ادخل المستخدم مثلا نصا برمجيا في ال txtusername مثل ما يحدث في ال SQL Injection
لا اعلم على وجه التحديد ما هو الحل ولكني اعلم انه يجب تحصين وفلترة مدخلات المستخدم
وبارك الله فيك حرصك على مشاركة هذا الجهد معنا
بارك الله فيك اخانا الكريم.
بصراحة لم افطن لهذا.
لكن انا استخدم الملف HtmlAgilityPack هل يمكن ان يعطي نتائج خاطئة بناءا على نص معين؟
سنجرب باذن الله ونشوف.
شكر الله لك زيارتك للموضوع واللذي اسعدني.
بارك الله فيكم جميعا.
بصدد انهاء التحكم بالاقسام
السلام عليكم ورحمة الله وبركاته
بارك الله بكم وبمشاركاتكم
من اجل حل مشكلة Sql Injection هناك طريقة استخدمها في حال لم استخدم الباراميترات وهي بسيطة جدا بان استبدل اي سنكل كوتيشن يمكن ان يدخله المستخدم بلاشيئ وبهذا يتعطل النص البرمجي الممكن ادخاله بغية الأذية
بهذا الشكل :
كود :
txtusername.Text.Replace("'", "")
هذا مع قواعد البيانات اما مع الملفات النصية فأعتقد بما ان المدخل من خلال التكست بوكس ستتعطل Injection بتعطيل السنكل كوتيشن
السلام عليكم ، طيب
هذه المحاولة سوف تفيدك في تعلم التعامل مع الملفات النصية والمجلدات والمسارات للملفات ..
ولكن ربما هي في الواقع هروب من التعامل مع قواعد البيانات او على الاقل تأجيلها ... اقول ربما ، واما عن نفسي فقد تهربت فعلا من التعامل مع قواعد البيانات حين بدأت بالبي اج بي بحدود عام 2002 ، ولجأت وقتها الى استخدام الملفات النصية في انشاء وبرمجة أول مدونة لي بالبي اج بي ، وبعد ذلك ندمت لاني انما اخرت تعلم قواعد البيانات فسبقني الاخرون وتأخرت انا ...