ASP (หน้าเซิร์ฟเวอร์ที่ใช้งานอยู่) เป็นเทคโนโลยีการพัฒนาเว็บเพจแบบไดนามิกตามแพลตฟอร์ม PWS (เว็บเซิร์ฟเวอร์ส่วนบุคคล) และแพลตฟอร์ม IIS (ข้อมูลอินเทอร์เน็ตเซิร์ฟเวอร์) ที่เปิดตัวโดย Microsoft ซึ่งตอนนี้กลายเป็นผู้ใหญ่และสมบูรณ์แบบมากขึ้น ที่นี่เรามีเพียงการอภิปรายง่ายๆเกี่ยวกับการเพิ่มประสิทธิภาพรหัส
8 เทคนิคการเพิ่มประสิทธิภาพการเข้ารหัส ASP:
1. ประกาศตัวแปร VBScript
ใน ASP VBScript ได้รับการสนับสนุนที่แข็งแกร่งและสามารถรวมฟังก์ชั่นและวิธีการ VBScript ได้อย่างราบรื่นซึ่งให้ความสะดวกสบายที่ดีสำหรับการขยายฟังก์ชั่นที่มีอยู่ของ ASP เนื่องจากแนวคิดของประเภทตัวแปรได้รับการเบลอใน ASP โปรแกรมเมอร์จำนวนมากจึงคุ้นเคยกับการไม่ประกาศตัวแปร VBScript ระหว่างการโต้ตอบระหว่าง ASP และ VBScript ซึ่งจะเพิ่มภาระการแยกวิเคราะห์ของเซิร์ฟเวอร์และส่งผลกระทบต่อความเร็วการร้องขอการตอบสนองของเซิร์ฟเวอร์
ในมุมมองของสิ่งนี้เราสามารถบังคับให้ผู้ใช้ทำการประกาศตัวแปรใน VBScript เช่นเดียวกับที่เราบังคับให้ผู้ใช้ดำเนินการประกาศตัวแปรใน VB วิธีการใช้งานคือการวาง <% ตัวเลือกที่ชัดเจน%> ที่จุดเริ่มต้นของบรรทัดโปรแกรม ASP
2. เข้ารหัสที่อยู่ URL
เมื่อเราใช้ ASP เพื่อสร้างที่อยู่ URL แบบไดนามิกด้วยพารามิเตอร์และกระโดดมันเป็นเรื่องปกติที่จะแยกวิเคราะห์ใน IE แต่เมื่อเรียกดู NetScrape จะมีข้อผิดพลาดดังนี้:
- httperror400
- 400Badrequest
- DuetomalformedSyntax มีความเข้าใจโดยผู้ทำเช่นนี้
- TheClient ควรไม่ได้รับการรับรอง
วิธีแก้ปัญหาคือการใช้วิธี urlencode ของวัตถุเซิร์ฟเวอร์ ASP ในตัวเพื่อเข้ารหัส URL การเข้ารหัสพารามิเตอร์ URL ที่สร้างขึ้น
- %
- url = xur.asp
- var1 = username = & server.urlencode (xur)
- var2 = & company = & server.urlencode (xurstudio)
- var3 = & phone = & server.urlencode (021-5385436-186)
- Response.redirecturl &? & var1 & var2 & var3
- %
3. ล้างวัตถุ
หลังจากใช้วัตถุก่อนอื่นให้ใช้วิธีปิดเพื่อเพิ่มทรัพยากรระบบที่ครอบครองโดยวัตถุ; ก่อนหน้านี้ฉันขัดข้อง IIS ของฉันโดยการสร้างชุดบันทึกมากกว่า 100 ชุดบนหน้าเว็บที่ไม่มีวัตถุที่ชัดเจน รหัสต่อไปนี้ใช้เนื้อหาฐานข้อมูลเพื่อสร้างรายการดรอปดาวน์ ตัวอย่างรหัสมีดังนี้:
- <%mydsn = dsn = xur; uid = xur; pwd = xur
- mysql = select*fromauthorswhereau_id <100
- setConntemp = server.createObject (adodb.connection)
- conntemp.openmydsn
- setREMPP = cONNTEMP.EXECUTE (MYSQL)
- ifrestemp.eofthen
- response.write ฐานข้อมูลว่างเปล่า
- Response.writemysql
- conntemp.close
- setConntemp = ไม่มีอะไร
- Response.end
- endif%>
- <%dountilrstemp.eof%>
- %
- rstemp.movenext
- วง
- rstemp.close
- setRempp = ไม่มีอะไร
- conntemp.close
- setConntemp = ไม่มีอะไร
- %
4. สร้างแบบสอบถาม SQL โดยใช้สตริง
การใช้สตริงเพื่อสร้างแบบสอบถามไม่ได้เพิ่มความเร็วในการแยกวิเคราะห์ของเซิร์ฟเวอร์ แต่ก็ยังแนะนำให้ใช้สตริงแทนคำสั่งแบบสอบถามอย่างง่ายเพื่อสอบถาม ข้อดีของสิ่งนี้คือมันสามารถค้นพบปัญหาของโปรแกรมได้อย่างรวดเร็วดังนั้นจึงช่วยอำนวยความสะดวกและสร้างโปรแกรมได้อย่างมีประสิทธิภาพ ตัวอย่างมีดังนี้:
- <%mysql = เลือก*
- mysql = mysql & fromempublishers
- mysql = mysql & wereestate = 'ny'
- Response.writemysql
- setREMPP = cONNTEMP.EXECUTE (MYSQL)
- rstemp.close
- setRempp = ไม่มีอะไร
- %
5. ใช้เคสเพื่อเลือกเงื่อนไข
เมื่อทำการเลือกตามเงื่อนไขให้ลองใช้คำสั่งเคสและหลีกเลี่ยงการใช้คำสั่งหาก การใช้คำสั่ง CASE สามารถทำให้โปรแกรมสามารถไหลได้และดำเนินการได้เร็วกว่าคำสั่ง IF ตัวอย่างมีดังนี้:
- %
- fori = 1to1000
- n = i
- Response.writeaddsuffix (n) & <br>
- ต่อไป
- %
- %
- FunctionAddSuffix (NUM)
- numpart = ขวา (num, 1)
- Selectcasenumpart
- กรณีที่ 1
- ifinstr (num, 11) จากนั้น
- num = num & th
- อื่น
- num = num & st
- endif
- กรณีที่ 2
- ifinstr (num, 12) จากนั้น
- num = num & th
- อื่น
- num = num & nd
- endif
- กรณีที่ 3
- ifinstr (num, 13) จากนั้น
- num = num & th
- อื่น
- num = num & rd
- endif
- กรณีที่ 4
- num = num & th
- caseelse
- num = num & th
- endelect
- addSuffix = num
- endfunction
- %
6. ใช้ค่าคงที่ที่กำหนดไว้ในไฟล์ ADOVBS.INC เพื่อเปิดชุดระเบียน
เมื่อเปิดชุดระเบียนคุณสามารถกำหนดประเภทเคอร์เซอร์และประเภทล็อคที่ชุดบันทึกจะเปิดขึ้น มีค่าคงที่บางอย่างที่กำหนดไว้ในไฟล์ ADOVBS.INC เพื่อกำหนดประเภทเหล่านี้ ไฟล์ ADOVBS.INC ถูกบันทึกไว้ในไดเรกทอรี/IIsamples/iisamples/iisamples ด้านล่างนี้เป็นเคอร์เซอร์ที่ใช้กันทั่วไปและประเภทล็อค
เคอร์เซอร์ประเภท: เคอร์เซอร์ AdopenFowardonly สามารถก้าวไปข้างหน้าได้เท่านั้น โดยผู้ใช้รายอื่น
ประเภทล็อค: AdlockReadoney ไม่สามารถแก้ไขบันทึกในชุดบันทึก;
- <!-#includevirtual =/adovbs.inc->
- %
- ConnectMe = dsn = xur; uid = xur; pwd = xur
- sqltemp = select*frommpublisherswherename = 'xur'
- setRestMP = server.createObject (ADODB.RecordSet)
- rstemp.opensqltemp, ConnectMe, Adopenstatic, Adlockoptimstic
- Response.writerstemp.recordcount & Recordsin <br> & sqltemp
- rstemp.close
- setRempp = ไม่มีอะไร
- %
7. หลีกเลี่ยงคำจำกัดความของวัตถุในไฟล์ global.asa
เนื่องจากเนื้อหาในไฟล์ global.asa สามารถอ้างอิงได้โดยไฟล์ทั้งหมดในเว็บไซต์ไม่ต้องสงสัยเลยว่าการกำหนดวัตถุในไฟล์ Global.asa สามารถบันทึกการทำซ้ำได้มาก ตัวอย่างเช่นในฟังก์ชั่น Application_onstart ใน global.asa คำจำกัดความต่อไปนี้จะทำ:
- <%subapplication_onstart
- SetApplication (theConn) = server.createObject (adodb.connection)
- ENDENTUB%>;
สิ่งนี้ช่วยให้คุณสามารถอ้างอิงที่คล้ายกันในรหัสใด ๆ ในเว็บไซต์:
- %
- mysql = select*frommpublisherswherestate = 'xur'
- setREMPP = แอปพลิเคชัน (theConn) .Execute (MySQL)
- %
ในทำนองเดียวกันวัตถุชุดระเบียนสามารถสร้างได้ในฟังก์ชัน session_onstart
- <%subsession_onstart
- SetSession (RSTEMP) = Server.CreateObject (ADODB.RecordSet)
- EndeDub%>
จากนั้นคำพูดต่อไปนี้จะทำในเว็บไซต์:
- %
- mysql = select*frommpublisherswherestate = 'xur'
- setSession (rstemp) = conntemp.execute (mysql)
- %
อย่างไรก็ตามการทำเช่นนี้ยังมีผลกระทบเชิงลบอย่างมาก ผลงาน. .
การแก้ไข: สร้างหน้า ASP เพื่อกำหนดวัตถุและแนะนำหน้า ASP นี้ในหน้าเว็บที่จำเป็นต้องเรียกวัตถุเหล่านี้ สมมติว่าชื่อหน้า ASP ของวัตถุที่กำหนดถูกกำหนดไว้แล้วหน้าสามารถแนะนำได้โดยการเพิ่มคำสั่งต่อไปนี้ในหน้า ASP ที่เกี่ยวข้อง
เมื่อแนะนำหน้าเว็บจะเป็นการดีที่สุดที่จะไม่รวม <%@language = vbscript%> คำสั่งในไฟล์ ASP ที่จะแนะนำ เนื่องจากในไฟล์ ASP สามารถมีเพียงหนึ่งเดียวที่แยกการวิเคราะห์ภาษาสคริปต์ที่กำหนดโดย @
8. การป้องกันความปลอดภัย
ASP จัดเตรียมกลไกการป้องกันรหัสที่ดีและรหัส ASP ทั้งหมดจะดำเนินการทางฝั่งเซิร์ฟเวอร์และส่งคืนผลลัพธ์ของการดำเนินการรหัสไคลเอนต์เท่านั้น ถึงกระนั้นในเวอร์ชันเก่าของ IIS คุณสามารถดูซอร์สโค้ดของ ASP หลังจากชื่อไฟล์ :: $ data ซึ่งอยู่ในขอบเขตของความปลอดภัยของเว็บเซิร์ฟเวอร์และไม่ได้อยู่ในขอบเขตของบทความนี้ ต่อไปนี้เป็นข้อควรระวังด้านความปลอดภัยง่ายๆสองประการ
แม้ว่าจะแนะนำให้แนะนำไฟล์ด้วย Inc ASP เป็นส่วนขยาย แต่ก็ยังแนะนำให้ใช้ ASP เป็นส่วนขยายเพื่อแนะนำไฟล์ที่นี่ เมื่อรหัสเหล่านี้ทำงานบนเว็บเซิร์ฟเวอร์ที่มีกลไกการรักษาความปลอดภัยที่ไม่ดีคุณสามารถเรียกดูเนื้อหาของไฟล์ที่นำเข้าได้โดยเพียงแค่ป้อนแถบที่อยู่ (Inc เป็นส่วนขยาย) ไม่ได้กำหนดประเภท (เช่น Inc) ไฟล์จะแสดงในซอร์สโค้ด
อย่าใส่ไฟล์ฐานข้อมูลภายในโครงสร้างเว็บไซต์ดังนั้นเมื่อบุคคลที่เป็นอันตรายได้รับพา ธ ฐานข้อมูลเขาสามารถรับฐานข้อมูลได้อย่างง่ายดายแล้วเปลี่ยนเนื้อหาฐานข้อมูลโดยพลการ วิธีที่ดีกว่าคือการสร้าง DSN (ชื่อแหล่งที่มาวันที่) สำหรับฐานข้อมูลและเข้าถึง DSN โดยตรงเมื่อเข้าถึงฐานข้อมูล
เทคนิคการเพิ่มประสิทธิภาพการเข้ารหัสการเข้ารหัส ASP แปดรายการข้างต้นนั้นสำคัญมากและต้องการให้ทุกคนได้สัมผัสกับมันอย่างรอบคอบและเข้าใจอย่างแท้จริงว่าจะกลายเป็นสิ่งที่เป็นของตัวเอง