當前位置:首頁 » 網頁前端 » web校驗碼案例
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

web校驗碼案例

發布時間: 2022-08-17 18:07:30

❶ web應用中數據校驗的零代碼如何實現

對用戶輸入的數據進行合法性檢查,避免錯誤非法的數據進入資料庫,這是業務系統最常見的需求。在web系統中,用戶在網頁上錄入了某些數據後,系統會檢查輸入值是否滿足一定的規則。最典型的例子是,用戶錄入了」運貨費」之後做數據提交,網頁上要先檢查」運貨費」是否是是小於100的正數,如果不是的話就給出提示,不允許提交。這個功能在客戶端程序中是比較容易實現的,客戶端的編程環境一般都提供」事件」觸發機制,一個控制項的填寫可以觸發一段代碼來校驗正確性。但是,採用一般方法來設計java的web程序,就沒有這么容易了。網頁上的數據校驗,不太可能提交給服務端程序去完成--那樣的話效率太低了,用戶體驗也很差。這里,給您推薦一款免費的商用控制項--快逸報表。快逸報表不僅是一個強大的報表工具,也是一個零代碼的強大編程類庫!web編程常常遇到的問題,快逸報表都可以解決:下拉列表、自動計算、自動生成流水號、實時數據合法性檢查、多選批量操作等等。那麼,和網上下載的開源控制項相比,用快逸報表來實現這些功能有什麼好處呢?1、快逸報表是免費的商用產品,質量和性能都很可靠。而網上下載的開源控制項通常是編程愛好者興趣之作,質量和性能很難保證,一旦有問題很難解決。2、快逸報表有商業公司負責維護和升級。而開源控制項如果有了需求要修改,找原創的人來修改,更本不可能,只能自己看懂內部的代碼--那樣比自己寫一個還要費時間呀!3、快逸報表是統一設計,統一開發、測試的商用產品。相比之下,在一個項目或者網站中,過多使用多種開源控制項,比如:上述功能全部都用不同的開源控制項來拼湊實現,那麼應用程序整體都會變的不穩定,不易修改了。4、快逸報表提供可視化的頁面設計界面,可以很大的提高web數據維護、錄入界面的製作的效率。快逸報表增加一個實時校驗十分簡單,具體方法如下:合法性檢查屬性的表達式規則遵從javascript的語法規則,所以在校驗表達式中可以是一個javascript表達式,也可以調用一個函數。例如我們要對F2單元格中錄入的運費的做校驗,運費的數據在0到100元之間,則選中F2單元格,打開更新屬性設置對話框,在校驗中增加一條校驗表達式,在表達式中輸入:${F2}gt;=0nbsp;amp;amp;nbsp;${nbsp;F2}lt;=100,出錯提示輸入:運費為非法數據然後確定發布,在運費里輸入一個大於100的數據,如1977.63,則系統會彈出javascript提示框,提示用戶輸入正確的數據:參考:http://www.quiee.com.cn 查看更多答案>>

滿意請採納

❷ 雲南電腦培訓分享解決WEB性能測試中的驗證碼問題

現在越來越多的網站為了安全性或是防止Spam的侵害,採用了驗證碼的校驗技術。簡單地說,驗證碼就是在進行登錄或是內容提交的時候,頁面上會隨機出現一個人工可識別,但機器不可識別的驗證字元串(一般是採用背景、扭曲等方式產生的圖片),要求登錄或是提交內容時同時輸入這個驗證碼。



驗證碼可以有效防止對口令的刺探和所謂的網路推廣軟體帶來的大量的Spam內容,目前已經被許多Internet或是Intranet應用接受為標準的實現方式。但對性能測試來說,這種驗證碼又帶來了很大的問題。


最突出的問題是,性能測試工具本身是自動化工具,由於這種驗證碼採用的是「防止自動化工具嘗試」的方法,因此,在錄制了腳本之後會發現,很難對腳本進行調整,以使其適應驗證碼驗證的需要。已經不止一次有人提到這個問題,並詢問有沒有較好的解決方案。


對這個問題,我個人的看法是,基本上可以考慮從三個途徑來解決該問題:


1、第一種方法,也是最容易想到的,在被測系統中暫時屏蔽驗證功能,也就是說,臨時修改應用,無論用戶輸入的是什麼驗證碼,都認為是正確的。這種方法最容易實現,對測試結果也不會有太大的影響(當然,這種方式去掉了「驗證驗證碼」這個環節,不過這個環節本來就很難成為系統性能瓶頸)。但這種方法有一個致命的問題:如果被測系統是一個實際已上線的系統,屏蔽驗證功能會對已經在運行的業務造成非常大的安全性的風險,因此,對於已上線的系統來說,用這種方式就不合適了;


2、第二種方法,在第一種方法的基礎上稍微進行一些改進。第一種方法帶來了很大的安全性問題,那麼我們可以考慮,不取消驗證,但在其中留一個後門,我們設定一個所謂的「萬能驗證碼」,只要用戶輸入這個「萬能驗證碼」,我們就驗證通過,否則,還是按照原先的驗證方式進行驗證。這種方式仍然存在安全性的問題,但由於我們可以通過管理手段將「萬能驗證碼」控制在一個小的范圍內,而且只在性能測試期間保留這個小小的後門,相對第一種方法來說,在安全性方面已經有較大的改進了;


3、如果安全性對應用來說真的是至關重要的,不容許有一絲一毫的閃失,那我們還可以用更進一步的方法來處理這個問題。一般的性能測試工具(MI的LR、Seague的Silk performer等)都能夠調用外部的DLL或是組件介面,因此,雲南電腦培訓http://www.kmbdqn.com/建議可以考慮獲得「驗證碼驗證」部分的實現,寫一個驗證碼獲取的DLL,在測試腳本中進行調用即可。


❸ JAVAWEB項目怎麼實現驗證碼

importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.util.Random;
importjavax.imageio.ImageIO;

publicclassCode{

//圖片的寬度。
privateintwidth=160;
//圖片的高度。
privateintheight=38;
//驗證碼字元個數
privateintcodeCount=4;
//驗證碼干擾線數
privateintlineCount=20;
//驗證碼
privateStringcode=null;
//驗證碼圖片Buffer
privateBufferedImagebuffImg=null;
Randomrandom=newRandom();

privatebooleantype=false;

publicCode(){

}

publicCode(intwidth,intheight){
this.width=width;
this.height=height;
}

publicCode(intwidth,intheight,intcodeCount){
this.width=width;
this.height=height;
this.codeCount=codeCount;
}

publicCode(intwidth,intheight,intcodeCount,intlineCount){
this.width=width;
this.height=height;
this.codeCount=codeCount;
this.lineCount=lineCount;
}

publicvoidinit(booleantype){
this.type=type;
}

//生成圖片
privatevoidcreatImage(booleantype){
intfontWidth=width/codeCount;//字體的寬度
intfontHeight=height-5;//字體的高度
intcodeY=height-8;

//圖像buffer
buffImg=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphicsg=buffImg.getGraphics();
//Graphics2Dg=buffImg.createGraphics();
//設置背景色
g.setColor(getRandColor(200,250));
g.fillRect(0,0,width,height);//設置字體
Fontfont=null;
if(!type)font=newFont("Fixedsys",Font.BOLD,fontHeight);
elsefont=getFont(fontHeight);
g.setFont(font);

//設置干擾線
for(inti=0;i<lineCount/2;i++){
intxs=random.nextInt(width);
intys=random.nextInt(height);
intxe=xs+random.nextInt(width);
intye=ys+random.nextInt(height);
g.setColor(getRandColor(1,255));
if(!type)g.drawLine(xs,ys,xe,ye);
elseshear(g,width,height,getRandColor(1,255));
}

//添加噪點
floatyawpRate=0.01f;//雜訊率
intarea=(int)(yawpRate*width*height);
for(inti=0;i<area;i++){
intx=random.nextInt(width);
inty=random.nextInt(height);

buffImg.setRGB(x,y,random.nextInt(255));
}


Stringstr1=randomStr(codeCount);//得到隨機字元
this.code=str1;
for(inti=0;i<codeCount;i++){
StringstrRand=str1.substring(i,i+1);
g.setColor(getRandColor(1,255));
//g.drawString(a,x,y);
//a為要畫出來的東西,x和y表示要畫的東西最左側字元的基線位於此圖形上下文坐標系的(x,y)位置處

g.drawString(strRand,i*fontWidth+3,codeY);
}


}

//得到隨機字元
privateStringrandomStr(intn){
Stringstr1="";//I和l不要
Stringstr2="";
intlen=str1.length()-1;
doubler;
for(inti=0;i<n;i++){
r=(Math.random())*len;
str2=str2+str1.charAt((int)r);
}
returnstr2;
}

//得到隨機顏色
privateColorgetRandColor(intfc,intbc){//給定范圍獲得隨機顏色
if(fc>255)
fc=255;
if(bc>255)
bc=255;
intr=fc+random.nextInt(bc-fc);
intg=fc+random.nextInt(bc-fc);
intb=fc+random.nextInt(bc-fc);
returnnewColor(r,g,b);
}

/**
*產生隨機字體
*/
privateFontgetFont(intsize){
Randomrandom=newRandom();
Fontfont[]=newFont[5];
font[0]=newFont("Ravie",Font.PLAIN,size);
font[1]=newFont("AntiqueOliveCompact",Font.PLAIN,size);
font[2]=newFont("Fixedsys",Font.PLAIN,size);
font[3]=newFont("WideLatin",Font.PLAIN,size);
font[4]=newFont("GillSansUltraBold",Font.PLAIN,size);
returnfont[random.nextInt(5)];
}

//扭曲方法
privatevoidshear(Graphicsg,intw1,inth1,Colorcolor){
shearX(g,w1,h1,color);
shearY(g,w1,h1,color);
}

privatevoidshearX(Graphicsg,intw1,inth1,Colorcolor){

intperiod=random.nextInt(2);

booleanborderGap=true;
intframes=1;
intphase=random.nextInt(2);

for(inti=0;i<h1;i++){
doubled=(double)(period>>1)
*Math.sin((double)i/(double)period
+(6.2831853071795862D*(double)phase)
/(double)frames);
g.Area(0,i,w1,1,(int)d,0);
if(borderGap){
g.setColor(color);
g.drawLine((int)d,i,0,i);
g.drawLine((int)d+w1,i,w1,i);
}
}

}

privatevoidshearY(Graphicsg,intw1,inth1,Colorcolor){

intperiod=random.nextInt(40)+10;//50;

booleanborderGap=true;
intframes=20;
intphase=7;
for(inti=0;i<w1;i++){
doubled=(double)(period>>1)
*Math.sin((double)i/(double)period
+(6.2831853071795862D*(double)phase)
/(double)frames);
g.Area(i,0,1,h1,0,(int)d);
if(borderGap){
g.setColor(color);
g.drawLine(i,(int)d,i,0);
g.drawLine(i,(int)d+h1,i,h1);
}

}

}publicvoidwrite(OutputStreamsos)throwsIOException{
if(buffImg==null)creatImage(type);
ImageIO.write(buffImg,"png",sos);
//JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(sos);
//encoder.encode(buffImg);
sos.close();
}

publicBufferedImagegetBuffImg(){
if(buffImg==null)creatImage(type);
returnbuffImg;
}

publicStringgetCode(){
returncode.toLowerCase();
}

//使用方法
/*publicvoidgetCode3(HttpServletRequestreq,HttpServletResponseresponse,HttpSessionsession)throwsIOException{
//設置響應的類型格式為圖片格式
response.setContentType("image/jpeg");
//禁止圖像緩存
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);


CreateImageCodevCode=newCreateImageCode(100,30,5,10);
session.setAttribute("code",vCode.getCode());
vCode.write(response.getOutputStream());
response.flushBuffer();
}*/

}

❹ java web中驗證碼代碼

生成code.jsp文件的完整代碼如下:

<%@ page language="java" contentType="image/jpeg; charset=gb2312"
pageEncoding="gb2312"%>
<%@ page import="java.awt.*,java.awt.image.*" %>
<%@ page import="java.util.*,javax.imageio.*" %>
<%!
Color getRandColor(int fc,int bc){
Random r=new Random();
if(fc>255) fc=255;
if(bc>200) bc=255;
int red=fc+r.nextInt(bc-fc);
int green=fc+r.nextInt(bc-fc);
int blue=fc+r.nextInt(bc-fc);
return new Color(red,green,blue);
}%>
<% //設置頁面不緩存
response.setHeader("Pragma","No-cache");
response.setHeader("cache-Control","no-cache");
response.setDateHeader("Expires",0);
//創建隨機類
Random r=new Random();
//在內存中創建圖像,寬度,高度
int width=80,height=30;
BufferedImage pic=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//獲取圖形上下文環境
Graphics gc=pic.getGraphics();
//設定背景顏色並進行填充
gc.setColor(getRandColor(200,250));
gc.fillRect(0,0,width,height);
//設定圖形上下文環境字體
gc.setFont(new Font("Times New Roman",Font.PLAIN,20));
//畫邊框
//gc.setColor(new Color(1));
//gc.drawRect(0,0,width-1,height-1);

//隨機產生200條干擾直線,使圖像中的認證碼不易被其他分析程序探測
gc.setColor(getRandColor(160,200));
for(int i=0;i<200;i++)
{
int x1=r.nextInt(width);
int y1=r.nextInt(height);
int x2=r.nextInt(15);
int y2=r.nextInt(15);
gc.drawLine(x1,y1,x1+x2,y1+y2);
}
//隨即產生100個干擾點
gc.setColor(getRandColor(120,240));
for(int i=1;i<100;i++){
int x=r.nextInt(width);
int y=r.nextInt(height);
gc.drawOval(x,y,0,0);
}
//隨機產生四位數字的驗證碼
String RS="";
String rn="";
for(int i=0;i<4;i++)
{
//產生十以內隨機數字
rn=String.valueOf(r.nextInt(10));
RS+=rn;
//將認證碼用drawString函數顯示到圖像里
gc.setColor(new Color(20+r.nextInt(110),20+r.nextInt(110),20+r.nextInt(110)));//使字體顏色效果明顯
gc.drawString(rn,13*i+16,16);
}
//釋放圖形上下文環境
gc.dispose();
//將認證碼RS存入session中共享
session.setAttribute("random",RS);

//輸出生成後的圖象到頁面
ImageIO.write(pic,"JPEG",response.getOutputStream());

out.clear();
out = pageContext.pushBody();

%>

使用隨即碼的jsp文件中加入下面一句即可
<image src="code.jsp">

❺ 如何製作 java web 驗證碼

java web的驗證碼原理如下: 根據參數隨機生成一個字元串,將字元串存儲在一個靜態變數中,然後將字元串寫在圖片上傳遞到前台供用戶識別。用戶將識別出的字元串再提交到伺服器, 伺服器取出靜態變數中的字元串與之對比。然後將對比結果返回給用戶。
可以自己在網上找些實現好的代碼學習一下,也可以使用一些比較成熟的驗證碼組件。
隨著越來越發達的網路技術, 驗證碼技術也在不斷進步,有的驗證碼中的字元變成了中文,有的在圖片中生成問題來讓用戶回答,有的甚至用到了圖片歸類,但原理沒變。

❻ java web 發送驗證碼到手機功能怎麼實現

這個除非給出供應商的介面協議,否則不可能給出實現。
舉例:
移動提供了功能介面A定義如下
A(號碼,簡訊內容)
你像掉用java方法一樣調用就行了。

聯通提供的功能介面B
B(號碼,簡訊內容,是否網內用戶,發送簡訊時間段,等等等)

實現是根據你和供應商的具體協議來的。

❼ javaweb,郵箱發送驗證碼後進行校驗。

簡單點,就是保存在緩存裡面,new一個map放在裡面就是了。校驗的話直接和map裡面的去比。

publicclassaaa{
publicstaticMap<String,String>map=newHashMap<String,String>();//定義一個靜態map,放驗證碼

//比如這個是生成驗證碼
publicStringCreateCheckCode(Stringname){
StringcheckCode="";
String[]arrs={"a","b","c","d","e","f","g","h","i","j",
"k","l","m","n","o","p","q","r","s","t","u","v",
"w","x","y","z","A","B"};
//隨機生成驗證碼、
for(inti=0;i<6;i++){
inta=(int)(Math.random()*28);
checkCode+=arrs[a];
}
//為了保證唯一性質,我們可以使用注冊的客戶的名字作為key
map.put(name,checkCode);
System.out.println(checkCode);
returncheckCode;
}
//這個可以作為控制層:比如客戶點擊驗證的連接,就會進入這個方法:來驗證驗證碼
publicbooleanverifyCheckCode(Stringname,StringcheckCode)
{
booleanflag=false;
Stringcode=map.get(name);
if(null!=code&&code.equals(checkCode)){
flag=true;
}

returnflag;

}


}

❽ 怎麼在web登錄界面實現驗證碼功能

兩套方案
第一:使用標簽或者textbox(需設為只讀)輸出驗證碼
第二:讓驗證碼生成圖片,並加入隨機線條
思路在上面,具體方法網路一下 ^_^
goodluck!

❾ 如何解決WEB性能測試中的驗證碼問題

基本上可以考慮從三個途徑來解決該問題: 1、也是最容易想到的,在被測系統中暫時屏蔽驗證功能,也就是說,臨時修改應用,無論用戶輸入的是什麼驗證碼,都認為是正確的。這種方法最容易實現,對測試結果也不會有太大的影響(當然,這種方式去掉了「驗證驗證碼」這個環節,不過這個環節本來就很難成為系統性能瓶頸)。但這種方法有一個致命的問題:如果被測系統是一個實際已上線的系統,屏蔽驗證功能會對已經在運行的業務造成非常大的安全性的風險,因此,對於已上線的系統來說,用這種方式就不合適了;
2、第二種方法,在第一種方法的基礎上稍微進行一些改進。第一種方法帶來了很大的安全性問題,那麼我們可以考慮,不取消驗證,但在其中留一個後門,我們設定一個所謂的「萬能驗證碼」,只要用戶輸入這個「萬能驗證碼」,我們就驗證通過,否則,還是按照原先的驗證方式進行驗證。這種方式仍然存在安全性的問題,但由於我們可以通過管理手段將「萬能驗證碼」控制在一個小的范圍內,而且只在性能測試期間保留這個小小的後門,相對第一種方法來說,在安全性方面已經有較大的改進了;
3、如果安全性對應用來說真的是至關重要的,不容許有一絲一毫的閃失,那我們還可以用更進一步的方法來處理這個問題。一般的性能測試工具(MI的LR、Seague的Silk performer等)都能夠調用外部的DLL或是組件介面,因此,可以考慮獲得「驗證碼驗證」部分的實現,寫一個驗證碼獲取的DLL,在測試腳本中進行調用即可。 除了這三種方法以外,可能還會有其他的方法存在,也希望各位能提供一些其他的思路。在我的實踐中,第二種方法用得比較多,對未上線系統系統的內部性能測試,有時候也用第一種方法。但要提醒的是,如果針對的是已上線系統,無論用哪種方法,測試完成後,都必須立刻將應用恢復,並對系統進行一次安全審計,以免在測試期間被他人入侵。第三種方法用得比較少,而且具體上還依賴於驗證組件是否能提供這樣的介面。

4、在進行壓力測試期間創建一批用來做壓力測試並按一定規則組織的一系列特定帳號或用戶名(如TestUserName0001、TestUserName0002……),然後叫開發人員在做驗證碼效驗時先判斷是否為這些特定測試帳號(我在我們公司的一次壓力測試中是叫他們開發人員在驗證前添加據如If Not UserName Like "TestUserName*" Then <正常驗證的代碼>(VB語法,我不懂Java)),如果是則不進行驗證阻攔或按另一種能夠被測試方同時了解的方式進行驗證,在壓力測試完成後應將這些帳號及小扣門均去掉,以防被發現並攻擊

❿ javaweb的驗證碼問題

點擊後,src屬性地址換一下,後面帶個時間戳欄位,這樣就不會緩存