สองวันที่ผ่านมาฉันกำลังทำงานกับเครื่องมือค้นหาขององค์กรในสถานที่และพบว่าบางไซต์สามารถเชื่อมโยงไปยังเนื้อหาของไซต์ได้ -
ฉันดูมันแปลก ๆ และกลับกลายเป็นว่ามันเชื่อมโยงตามกฎการกำหนดหมายเลขอัตโนมัติของ ID ฐานข้อมูล ~~
ฉันได้ทำสิ่งต่อไปนี้ในเวลาว่างหวังว่ามันจะเป็นประโยชน์กับทุกคนในการเขียนโปรแกรม ASP ในอนาคต!
-
'' // สร้างจำนวนตัวเลขสุ่มที่ระบุ
'' // คุณสามารถใช้ฟังก์ชั่น ixuer_rnd_str ที่เขียนด้วย Guidy ซึ่งมาพร้อมกับ 15 สไตล์และคุณสามารถ pseudo MD5 ได้ !!
functionRndSTR (strlong)
dimtempstr
สุ่ม
Dowhilelen (rndstr) <strlong
tempstr = cstr (chr ((57-48)*rnd+48)))
rndstr = rndstr & tempstr
วง
rndstr = rndstr
endfunction
-
ต่อไปนี้เป็นพารามิเตอร์ที่ส่งในแบบฟอร์มเป็นตัวอย่างสำหรับ request.form ค่าดั้งเดิมของพารามิเตอร์ doaction ที่ต้องส่งผ่านคือ ID อ่านจากฐานข้อมูล
<formName = iForMAction = "abc.asp" method = "post">
<inputName = doactionType = "hidden" value = "<%= rndStr (10)%> <%= rs (" id ")%> <%= rndSTR (10)%>">
</form>
สังเกต:
ค่าของ doaction ข้างต้นมีการเปลี่ยนแปลงและค่าที่ได้รับทุกครั้งที่หน้าจะรีเฟรชแตกต่างกัน ~~
ด้านล่างคือหน้า abc.asp
ก่อนอื่นรับค่าของ doaction
doaction = trim (request.form ("doaction"))
ด้านล่างคุณสามารถเพิ่มการตรวจสอบด้วยตัวเองเช่น isnumeric ฯลฯ
จากนั้นเรามาทำลายค่าของการทำปฏิกิริยากันเถอะ
หรี่
doaction = mid (doaction, 11)
LastId = mid (doaction, 1, len (doaction) -10)
หากคุณคุ้นเคยกับฟังก์ชั่นกลางเนื้อหาข้างต้นนั้นง่ายต่อการคาดเดามันไม่ง่ายเลยเหรอ?
นี่คือตัวอย่างที่แท้จริง:
ค่าของ ID ที่จะส่งผ่านโดย doaction ดั้งเดิมในฐานข้อมูล (ประเภทของฟิลด์มีหมายเลขโดยอัตโนมัติ) คือ: 34
ภาพประกอบ:
11 ในกลาง (doaction, 11) สร้างอักขระสุ่มจำนวนหนึ่ง + 1
10 ใน LastId = mid (doaction, 1, len (doaction) -10) คือจำนวนตัวเลขอักขระแบบสุ่มที่สร้างขึ้นตามจำนวนที่ระบุ!
หรี่
Doaction = 3614354944348151287527 - ค่า ID หลังจากปลอมตัว (สามารถตรวจสอบเป็นตัวเลขได้)
doaction = mid (doaction, 11)
LastId = mid (doaction, 1, len (doaction) -10)
LastId = 34
ฉันทดลองและหากใช้กับตัวอักษรและตัวเลขที่สร้างแบบสุ่มมันสามารถปลอมได้อย่างสมบูรณ์เป็นค่าที่คล้ายกับ MD5!
มีเพียงเงื่อนไขเดียวและคุณต้องระบุจำนวนบิตของอักขระสุ่ม!
ฮ่าฮ่าตอนนี้ทุกคนสามารถส่งออกค่าสุดท้ายของการตอบสนองเขียนเพื่อดูว่าเป็น ID ในฐานข้อมูลอีกครั้งหรือไม่?