??????
以下鏈接" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網站運營 > (03)③ HTML 表單詳解 | HTML

(03)③ HTML 表單詳解 | HTML

時間:2023-09-14 22:24:02 | 來源:網站運營

時間:2023-09-14 22:24:02 來源:網站運營

(03)③ HTML 表單詳解 | HTML:原創(chuàng):itsOli @前端一萬小時本文首發(fā)于公眾號「前端一萬小時」本文版權歸作者所有,未經授權,請勿轉載!本文節(jié)選自“語雀”私有付費專欄「前端一萬小時 | 從零基礎到輕松就業(yè)」
??????
以下鏈接為本文最新勘誤篇章——《③ HTML 表單詳解》




1. POST 和 GET 方式提交數據有什么區(qū)別? 2. 在 input 里,name 有什么作用? 3. label 有什么作用?如何使用? 4. radio 如何分組? 5. placeholder 屬性有什么作用? 6. type=hidden 隱藏域有什么作用?舉例說明。 7. CSRF 攻擊是什么?如何防范? 8. 網頁驗證碼是干嘛的?是為了解決什么安全問題? 9. 常見 Web 安全及防護原理?10. 以下哪種寫法會導致 checkbox 被勾選: ? <input type="checkbox" checked=false > ? <input type="checkbox" checked=true > ? <input type="checkbox" checked="" > ? <input type="checkbox" checked> ? <input type="checkbox" >11. 如果想勾選 checkbox,以下哪些是推薦的寫法: ? <input type="checkbox" checked=true > ? <input type="checkbox" checked="true" > ? <input type="checkbox" checked="checked"> ? <input type="checkbox" checked>12. 有 4 個 radio,想 id1 和 id2 一組,id3 和 id4 一組,實現(xiàn)單選,以下說法正確的是?(不定項) <input id="id1" type="radio"> <input id="id2" type="radio"> <input id="id3" type="radio"> <input id="id4" type="radio"> ? id1 和 id2 需要設置相同的 name,id3 和 id4 需要設置相同的 name。 ? id1 和 id2 需要設置相同的 value,id3 和 id4 需要設置相同的 value。 ? id1 和 id2 需要設置相同的 class,id3 和 id4 需要設置相同的 class。 ? id1 和 id2 需要設置相同的 label,id3 和 id4 需要設置相同的 label。13. 關于 POST 和 GET 的區(qū)別,以下說法正確的是? ? GET 的語義是“要”數據,POST 的語義是“給”數據或者“創(chuàng)建”數據。 ? GET 把參數拼裝成 URL,發(fā) GET 請求實際上是瀏覽器請求拼接后的 URL。 ? GET 提交的數據沒有最大長度限制,POST 提交的數據有最大長度限制(和服務端的設置有關)。 ? GET 提交的數據有最大長度限制,根本原因是瀏覽器地址欄對輸入的 URL 有最大長度限制,超過會截斷。 ? POST 相對更“安全”一些,因為 GET 請求拼裝的 URL 會保存在瀏覽器歷史記錄,到了服務器之后一般 也有保存的請求日志可以直接看到請求參數。 ? 從嚴格的安全意義上講,只要是 HTTP 的請求,都不安全。HTTPS + POST 才安全。 上方面試題“參考答案詳解”,請點擊此處查看獲取方式!


前言: 這一篇我們集中精力攻克一個知識點——表單。

這個知識點在工作中用處很廣泛,不管是網頁還是 APP,只要涉及到“注冊”,就會有他的身影,屬于必掌握項。

1 “表單”的相關定義

2 “表單”的實際運用及相關元素注釋

<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>HTML 表單</title> <style type="text/css"> #txa { width: 300px; height: 200px; margin-left: -12px; } </style></head><body> <div class="login"> <input type="text" name="sex"> <!-- ??注釋 1 --> <form action="/getinfo" method="get"> <!-- ??注釋 2 --> <div class="username"> <!-- ??注釋 3 --> <label for="username">姓名</label> <!-- ??注釋 4 --> <input id="username" type="text" name="username" value="Oliver"> <!-- ??注釋 5 --> </div> <div class="password"> <label for="password" >密碼</label> <input id="password" type="password" name="password" placeholder="輸入密碼"> <!-- ??注釋 6 --> </div> <div class="sex"> <label>性別</label> <!-- ??注釋 7 --> <input type="radio" name="sex" value="男" checked><!-- ??注釋 8 --> <input type="radio" name="sex" value="女"></div> <div class="orientation"> <label>取向</label> <input type="radio" name="orientation" value="男"><input type="radio" name="orientation" value="女" checked></div> <div class="hobby"> <label>愛好</label> <input type="checkbox" name="hobby" value="reading" checked>讀書 <!-- ??注釋 9 --> <input type="checkbox" name="hobby" value="design" checked>室內設計 </div> <div> <label for="txa">評論:</label> <textarea id="txa" name="article">是個好人! </textarea> <!-- ??注釋 10 --> </div> <div class="file"> <input type="file" name="myfile" accept="image/png"> <!-- ??注釋 11 --> </div> <div class="mycar"> <label>我的 car</label> <select name="mycar"> <!-- ??注釋 12 --> <option value="三菱" selected>三菱</option> <!-- ??注釋 13 --> <option value="奧迪">奧迪</option> <option value="MINI">MINI</option> </select> <input type="submit" value="提交"> <!-- ??注釋 14 --> <input type="button" value="不提交"> <!-- ??注釋 15 --> <input type="reset" value="重置輸入"> <!-- ??注釋 16 --> <input type="hidden" name="csrf" value="123456oliver"> <!-- ??注釋 17 --> </div> </form> </div></body></html>注釋 1:

<input type="text" name="sex">注釋 2:

<form action="/getinfo" method="get">① GET
本質上是一個 URL 的拼接,即把所有參數拼接到一起,形成一個新的 URL。當我們點“提交”這個按鈕時,瀏覽器做了什么事情呢?

② POST
URL 不會發(fā)生變化,他不像 GET 那樣 URL會變成參數的拼接然后傳輸給后臺。但用戶填寫的數據依然會通過瀏覽器傳輸給后臺(相對 GET 來說更加的安全),且較之 GET,他的 URL 字符長度不會因為瀏覽器地址欄字符長度所限制(而 GET,如果參數很多導致字符過長,則會被瀏覽器截斷)。

③ 什么時候選 GET/POST?

注釋 3:

<div class="username">用一個 div 來區(qū)分出一個“塊”,用一個 class 來建立一個“類”(以下同理)。

注釋 4:

<label for="username">姓名</label> <!-- 注釋 4 --><input id="username" type="text" name="username" value="Oliver"> <!-- 注釋 5 -->注釋 5:

<label for="username">姓名</label> <!-- 注釋 4 --><input id="username" type="text" name="username" value="Oliver"> <!-- 注釋 5 -->注釋 6:

<div class="password"> <label for="password">密碼</label> <input id="password" type="password" name="password" placeholder="輸入密碼"> <!-- 注釋 6 --></div>注釋 7:

<div class="sex"> <label>性別</label> <!-- 注釋 7 --> <input type="radio" name="sex" value="男" checked><!-- 注釋 8 --> <input type="radio" name="sex" value="女"></div>單純用了 label,里邊沒有 for,與之對應的 input 里邊也沒有 id。因為這個 input 是“單選框”類型,沒有必要點擊文字(性別)就選擇或輸入。

注釋 8:

<div class="sex"> <label>性別</label> <!-- 注釋 7 --> <input type="radio" name="sex" value="男" checked><!-- 注釋 8 --> <input type="radio" name="sex" value="女"></div>……value="男" checked>男……value="女">女因為是勾選,沒有在輸入框輸入東西,如果沒有 value 值,那么用戶只勾選后提交,我們后臺是沒有東西的。所以,必須手動添加 value 值,讓勾選后,后臺可以顯示對應勾選的 value 值;

注釋 9:

<div class="hobby"> <label>愛好</label> <input type="checkbox" name="hobby" value="reading" checked>讀書 <!-- 注釋 9 --> <input type="checkbox" name="hobby" value="tour" checked>旅游 <input type="checkbox" name="hobby" value="design" checked>室內設計</div>注釋 10:

<div> <label for="txa">評論:</label> <textarea id="txa" name="article">是個好人! </textarea> <!-- 注釋 10 --></div>注釋 11:

<div class="file"> <input type="file" name="myfile" accept="image/png"> <!-- 注釋 11 --></div> 注釋 12、注釋 13:

<div class="mycar"> <label>我的 car</label> <select name="mycar"> <option value="三菱" selected>三菱</option> <option value="奧迪">奧迪</option> <option value="MINI">MINI</option> </select>注釋 14、15、16:

<input type="submit" value="提交"> <!-- 注釋 14 --><input type="button" value="不提交"> <!-- 注釋 15 --><input type="reset" value="重置輸入"> <!-- 注釋 16 -->注釋 17:

<input type="hidden" name="csrf" value="123456oliver">
  1. 暫存一些信息。比如在 <input type="hidden" name="_" value="_"> 里邊埋了一個值,下次我們要用的時候,就直接可以定位到這個元素去獲取它的值,獲取到后就可以用了,但用戶什么都不知道;
  2. 由于可以暫存信息,那么在使用一些安全策略時,可以用到這個功能——CSRF 攻擊。
先復習相關文章:《老生常談的從 URL 輸入到頁面展現(xiàn)背后發(fā)生的事》。

比如打開一個頁面,實際這個頁面是寫好的模板,然后后端往里邊填充數據,填充好后讓你看得到。

換句話說,這個頁面是后端處理后得到的頁面。那假如說,后端在渲染這個頁面給我們時(返回給瀏覽器之前),他就通過這種方式在這里加上這個值—— <input type="hidden" name="csrf" value="123456oliver"> ,他把這個東西寫好后發(fā)給你。發(fā)給你之后,你看到的頁面表面上沒什么特別的變化,可實際上有一個點已經埋下了—— name="csrf" value="123456oliver" 。

接下來,用戶該干什么還是繼續(xù)干,填寫用戶名、密碼等,填寫完后點擊“提交”。當用戶點擊“提交”按鈕的時候,用戶所填寫的所有信息都會提交給后臺,同時會提交 <input type="hidden" name="csrf" value="123456oliver"> 里的這個值:csrf=123456oliver 。

提交給后臺后,后臺就可以做個“校驗”,看看這個值對不對,如果這個值是對的,那你用戶的提交是安全的。

假如說沒有這樣一個參數、接口,那任何人都可以偽造一個這樣的頁面。比如說他知道我們的請求地址( action 的值),就可以用 method 發(fā)送一個 GET/POST 請求,把所有的參數都發(fā)進去,那就相當于修改了數據庫。

但如果我們有這個值—— csrf=123456oliver ,而他沒有這樣一個值,或得到的值是錯的,那他即使發(fā)送了這些數據,服務器也是不認可的。

只有當他發(fā)的這個值是對的,才能說明他有這個權限,表示他是一個合法的用戶。這樣就可以阻止 CSRF 攻擊。

當然,CSRF 攻擊這個東西還涉及到 Cookie 的校驗等,后續(xù)再作相關的文章講解。


后記: 知識點很多、很雜,但靜下心來,用兩個顯示器,一邊把本文代碼拷貝放到 JS Bin 里邊運行,一邊對著本文的注釋一行行把代碼理順,最后會發(fā)現(xiàn)不過如此。前端的學習更多的是耐力的考驗,有興趣固然重要,但不付諸時間和耐力是不行的。

祝好,qdywxs ? you!

關鍵詞:

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉