日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FinalTest 基于web的登录口令修改设计

發布時間:2023/12/2 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FinalTest 基于web的登录口令修改设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本次任務主要實現登錄口令的修改,當用戶修改了登錄名和登陸密碼以后,下一次登錄將會使用新的登錄名和登錄密碼。

FT.1 頁面設計

登錄的頁面主要使用了原來的pass.htm文件,主要是因為我自己做了一個相差不大的界面,如下圖所示,但是沒有加入“#”這個標志,使得底層代碼獲取不到表單里的內容。對比了一下原來的界面,并沒有增加更多的新功能,所以將專注點就放在了功能的實現上。

?

最終的登錄界面如下圖,

?

?

在第11課網絡服務的基礎上,添加框架,將4-Menu&frame文件夾里的內容復制到/work/uClinux-dist/user/cgi_generic里,此時如果編譯以后下載到開發板以后只能打開lan頁面,我們要打開的是pass頁面,所以按照lan頁面來修改,

首先,打開template.c文件,新增兩個函數passWebPageInput()和passWebPageOutput()函數,還有一個頭文件,程序代碼如下:

#include<crypt.h>

#define PATH "/etc/passwd"

static char oldname[256];

static char oldpassword[256];

static char newname[256];

static char newpassword[256];

static char newpassword2[256];

void passWebPageInput(char **postvars,int form_method)

{

?????? int ret;

?????? int?? i;

?????? char *intf_oldname = (char *)NULL;

?????? char *intf_oldpassword = (char *)NULL;

?????? char *intf_newname = (char *)NULL;

?????? char *intf_newpassword = (char *)NULL;

?????? char *intf_newpassword2 = (char *)NULL;

?

?????? TagConvert intfSelectedTag[] =

?????? {

????????????? { "text", "oldname", CTYPE_STRING, &intf_oldname },

????????????? { "password", "oldpassword", CTYPE_STRING, &intf_oldpassword },

????????????? { "text", "newname", CTYPE_STRING, &intf_newname },

????????????? { "password", "newpassword", CTYPE_STRING, &intf_newpassword },

????????????? { "password", "newpassword2", CTYPE_STRING, &intf_newpassword2 },

?????????????

?????? };

?????? int intfTagNum = sizeof(intfSelectedTag)/sizeof(intfSelectedTag[0]);???

?

?????? for( i=0; i<intfTagNum; i++ )

?????? {

????????????? ret = cgi_itemval_get(&intfSelectedTag[i]);

????????????? if( ret != 0 )

????????????? {

????????????? ?????? return;

????????????? }

?????? }

?

?????? strcpy( oldname, intf_oldname );

?????? strcpy( oldpassword, intf_oldpassword );

?????? strcpy( newname, intf_newname );

?????? strcpy( newpassword, intf_newpassword );

?????? strcpy( newpassword2, intf_newpassword2 );

?

}

void passWebPageOutput(char **postvars,int form_method)

{

?????? char *key="ab";

?????? char user[128]="user ";

?????? char passwd[128]="passwd ";

?????? char *name1;

?????? char *passwd1;

?????? char str_oldname[40]="", str_oldpassword[40]="" ,str_newname[40]="", str_newpassword[40]="",str_newpassword2[40]="";

?????? char?????? *argv[]={str_oldname,str_oldpassword,str_newname,str_newpassword,str_newpassword2};

?????? int?? itemNum=5;

?

?????? FILE *f;

?????? f=fopen(PATH,"w");

?????? fclose(f);

?????? f=fopen(PATH,"a++");

?????? fflush(stdout);

?????? name1=crypt(newname,key);

?????? strcat(user,name1);

?????? fputs(user,f);

?????? fputs("\n",f)

?????? fflush(stdout);

?????? passwd1=crypt(newpassword2,key);

?????? strcat(passwd,passwd1);

?????? fputs(passwd,f);

?????? fputs("\n",f);

?????? fclose(f);

?????? if( oldname[0] )

????????????? sprintf( str_oldname, "%s", oldname );

?????? if( oldpassword[0] )

????????????? sprintf( str_oldpassword, "%s", oldpassword );

?????? if( newname[0] )

????????????? sprintf( str_newname, "%s", newname );

?????? if( newpassword[0] )

????????????? sprintf( str_newpassword, "%s", newpassword );

?????? if( newpassword2[0] )

????????????? sprintf(str_newpassword2, "%s", newpassword2 );

?????? output_html( "passwd.htm", itemNum, argv);

}

在函數passWebPageInput()里可以獲得頁面表單上的輸入數據,包括:舊用戶名,舊密碼,新用戶名,新密碼和確認新密碼五個數據。

在函數passWebPageOutput()里將獲得的數據寫入/etc/passwd文件里,這樣可以使關閉瀏覽器以后,可以使用新用戶名和密碼登錄。

?

?

FT.2 用戶名和密碼保存

在FT.1里實現了修改密碼和用戶名的功能,但是,在開機重啟以后,用戶名和密碼又恢復到了admin,也就是說,修改以后的密碼和用戶名并沒有保存下來。所以,接下來就實現保存功能。

具體思路:

能夠實現保存的在第六課MTD的內容里有介紹,使用mtdblock0來保存用戶名和密碼,將mtdblock0掛載到/mnt目錄下,將修改好的用戶名和密碼復制到/mnt里,開機的時候,程序通過將/mnt里的內容復制到/etc下,覆蓋passwd的內容,此時再登錄192.168.0.1,用原來的密碼登錄就不行了,只能用新的用戶名和密碼登錄。

實現步驟:

修改文件/work/uClinux-dist/vendors/Marvell/Firefox/rc,在尾行加入:

mount -t ext2 /dev/mtdblock0 /mnt

cp /mnt/passwd /etc

如圖:

?

修改/work/uClinux-dist/user/cgi_generic/ template.c文件,帶代碼中實現文件的復制操作:

?編譯,下載進入開發板,登錄192.168.0.1,輸入初始登錄密碼和用戶名:admin,然后進入修改登錄口令,將用戶名改為admin1,登錄密碼改為123,如下圖:

點擊保存,關閉瀏覽器,然后查看etc/passwd和mnt/passwd里的內容是否被修改了,可以看到已經改為了新的用戶名和密碼了。

?

在命令行使用umount解掛,命令:umount /mnt,此時,保留在/mnt里的數據就會被保留下來,重啟也不會丟失。

接下來重啟開發板,再一次的查看/etc/passwd的內容是不是改過之后的密碼用戶名。

?

經過對比發現,的確保留了修改后的密碼,

再重新登錄瀏覽器,使用舊密碼登錄已經不行了,必須使用新密碼

?

FT.3 總結

本次實驗并不是完美的,因為還有一個比較難以解決的問題,就是沒法在程序中umount,只能在外部命令行輸入umount,在程序中試驗了無數次umount,并沒有正確解掛,因此,不得不采取在命令行輸入的模式,所以今后需要在加強這方面的學習,讓這個程序能夠自動的執行,而不是還要手動輸入命令。最后,本學期的課就到此為止了,感謝老師的教導和陪伴,祝您生活愉快,闔家幸福。

轉載于:https://www.cnblogs.com/LiuFarrell/p/9836998.html

總結

以上是生活随笔為你收集整理的FinalTest 基于web的登录口令修改设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。