倍可親

回復: 0
列印 上一主題 下一主題

HTML/JavaScript自學實例(密碼與安全防範)

[複製鏈接]

7

主題

155

帖子

43

積分

貝殼新手上路

大一新生(四級)

Rank: 2

積分
43
跳轉到指定樓層
樓主
剛果共和國 發表於 2005-12-22 05:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我同學的WEBSITE:www.geocities.com/slamoras

你進去會看到一個對話窗(應該是吧...), 問USER和PASS...怎麼做到這種效果呢?


ghostCatcher問了我這個問題,我覺得比較有趣,所以跟大家一起討論一下。所有學HTML/JavaScript的朋友都可以看看。

網頁
初學HTML的朋友一定記住:不要忘記看作者的源碼。View->age Source[/COLOR] 只有這樣才能學到新的東西。打開源碼看到類似於下面。

可以看出這是一個比較簡單的HTML網頁。
[U]綠色部分:[/U]「身子」也就是<body>,裡面有一個Form兩個空格。用戶填好后,javaScript會處理這兩個空格。比較簡單,我就不再解釋了。

[U]紅色Script之間:[/U] 這裡就是JavaScript.  淡藍色部分[/COLOR]把兩個用戶填寫的空格轉換成小寫字母然後存到變數password和username裡面。橘黃色[/COLOR]用兩個變數,設成1。然後用兩個for loop將空格裡面填寫的每個字母的ASCII代碼相乘。最後紫色部分[/COLOR]用最後變數結果與1356464340000和12648955685比較,如果相同就跳到變數password的.html


介紹完了。。如果有興趣看破解部分,請繼續。。。

  1. <html>
  2. <head>
  3.        
  4.         <title>Verify Password</title>
  5. <link rel="sheet" type="text/css" href="s.css">

  6. [COLOR=DarkRed]<script>[/COLOR]
  7. function submitentry(){
  8. [COLOR=Blue]password = document.password1.password2.value.toLowerCase()
  9. username = document.password1.username2.value.toLowerCase()[/COLOR]
  10. [COLOR=DarkOrange]
  11. passcode = 1
  12. usercode = 1
  13. for(i = 0; i < password.length; i++) {
  14. passcode *= password.charCodeAt(i);
  15. }
  16. for(x = 0; x < username.length; x++) {
  17. usercode *= username.charCodeAt(x);
  18. }[/COLOR]
  19. [COLOR=DarkOrchid]
  20. //CHANGE THE NUMBERS BELOW TO REFLECT YOUR USERNAME/PASSWORD
  21. if(usercode==1356464340000&&passcode==12648955685)
  22. //CHANGE THE NUMBERS ABOVE TO REFLECT YOUR USERNAME/PASSWORD
  23. {
  24. window.location=password+".html"}
  25. else{
  26. alert("That Password is incorrect. Access Denied...")}
  27. }[/COLOR]

  28. [COLOR=DarkRed]</script>[/COLOR]
  29. </head>
  30. [COLOR=DarkGreen]<body bgcolor=#000000 text=#FFFFFF link="gold" alink=#C0C0C0 vlink="gold">
  31. <center>
  32. <h1>Welcome!</h1>
  33. </center>
  34. <p align="center">Please enter the username and password below to proceed.</p>
  35. <form name="password1">
  36. <center><strong>Enter username: </strong>
  37. <input type="text" name="username2" size="15"></center>

  38. <br>
  39. <center><strong>Enter password: </strong>
  40. <input type="password" name="password2" size="15"></center>

  41. <center><input type="button" value="Submit Password" onClick="submitentry()"></center>
  42. </form>
  43. <p align="center">The Username is "friend", and the password is "games".</p>

  44. </body>[/COLOR]
  45. </html>
複製代碼



安全防範

當我看完這個編碼方式,我就覺得。。。哇,這個可以簡單破解。。我來解釋一下。

如果知道password是什麼,我們就可以直接打入"password.html",跳過驗證。其實密碼就是password,就是passcode,就是12648955685。但是不是這麼簡單。12648955685代表幾個ASCII字母相乘的積。我們不知道這個是由幾個字母組成,也不知道是什麼字母。但我們知道所有的字母都是小寫因為藍色部分寫了:document.password1.password2.value.[U]toLowerCase[/U]() 。打開下面網站:http://www.users.webathletics.com.au/dbridge/ascii.htm 看到小寫字母是從97到122。所以可以一個一個的試,一共26個字母,而且一般密碼都不是26個位元組長。我試的時候就是用12648955685除每個ASCII代號,而且每個代號都要除兩遍,因為每個字母可能會用多餘一次。每次除后,必須整除!!下面是我計算結果。

12648955685 / 97 = 130401605  整除!!(97)
130401605 / 97 不整除,下一個。。。
98, 99, 100都不整除。。。
130401605 / 101 = 1291105 整除!!(101)
102 不整除。。
1291105 / 103 = 12535 整除!!(103)
104,105,106,107,108都不整除。。。
12535 / 109 = 115 整除!!(109)
最後是115。。。

所以對照上面的ASCII map結果是:97(a), 101(e), 103(g), 109(m), 115(s).

不知你看出密碼是什麼了么?。。。。。。。。。"games"!!!

所以我在地址欄打入:www.geocities.com/slamoras/games.html

果然,這裡有個小page!!成功樓。如果有興趣,你可以用同樣方式破解Username,試試吧!!

注意:簡單的密碼驗證完全可以,但是不能用作保護比較機密的東西~
您需要登錄后才可以回帖 登錄 | 註冊

本版積分規則

關於本站 | 隱私權政策 | 免責條款 | 版權聲明 | 聯絡我們

Copyright © 2001-2013 海外華人中文門戶:倍可親 (http://big5.backchina.com) All Rights Reserved.

程序系統基於 Discuz! X3.1 商業版 優化 Discuz! © 2001-2013 Comsenz Inc.

本站時間採用京港台時間 GMT+8, 2025-7-19 17:28

快速回復 返回頂部 返回列表