在前端開發(fā)編寫html文件的時候,我們可能會很熟練的寫出常見的html元素,但是如果問到某些元素的差別時,大家不一定能說的出來,今天就給大家總結一下那些很常見但容易混淆的屬性。
html與css
css樣式文件引入的方式有兩種,分別是link標簽和@import。
link語法結構
link語法結構如下,注意rel='stylesheet'屬性要加上。
link語法結構
@import語法結構
當@import用在html中時,需要配合style標簽
@import在html中
當@import用在css文件中,直接使用@import url()即可
@import在css中
既然link與@import都可以用來引入css,那么它們的區(qū)別是什么呢?我們又該如何選擇呢?
link是XHTML標簽的一種,除了可以加載css外,還可以定義其他rel屬性,而@import只能用來加載css。
link標簽在加載css時,與頁面一同加載,而@import需要等到網(wǎng)頁完全加載以后才進行加載。
link是XHTML標簽,不存在兼容問題,而@import是在CSS2.1中提出的,對于低版本的瀏覽器不支持。
link標簽可以通過Javascript代碼去控制其屬性,而@import不可以。
javascript控制link
@import支持在css文件中再次引入其他css文件,方便對多個css文件的管理。
因為@import引入的文件需要在網(wǎng)頁完全加載后再加載,如果在網(wǎng)絡速度較慢的情況下,會出現(xiàn)頁面閃現(xiàn),因此建議使用link標簽代替@import。
html元素的readonly與disabled屬性一般都是用于無法改變表單的內容,但是兩者也是有區(qū)別的。
readonly屬性只針對input(text,password)和textarea元素,而disabled適用于所有表單元素,包括select,radio,checkbox,button等。
在表單元素使用了disabled后,該元素的的值不會隨著form的action請求傳遞到服務器端,而使用readonly的元素值可以傳遞到服務器端。
以下是一些關于兩者的使用建議。
在表單中為用戶預填的唯一標識碼,不允許用戶改動,而且需要傳遞到后臺的使用readonly屬性。
用戶提交完表單元素后,等待服務器端的驗證,這個過程應該將元素設為disabled,button和submit也應該設為disabled,以防止重復提交。
title屬性
img標簽的title屬性是用來提供一些建議性的信息,在鼠標停留在上方時會顯示,它對于圖片來說只是一種注釋性的信息,重要性偏低。
alt屬性
alt屬性是為不能顯示圖像時,用來指定替換文字,需要注意的是替換文字是用來代替文字的,而不是用來注釋文字的。
屬性的使用
在做圖片為主的網(wǎng)頁時,考慮到網(wǎng)頁的SEO,應當設置圖片的alt屬性為圖片的真實內容,而給title設置一些建議性的內容。
今天這篇文章主要將了幾個html中容易混淆的屬性,你有收獲嗎?
不管是C#還是Java,都是可以通過反編譯工具,進行反編譯后查看源碼,這個源碼雖然不是真正意義的源碼,但和真正源碼的相差不是很大.如果是單純的Web還好一些.因為只需要部署到服務器上,也很少人能看到部署文件.所以相對要好一些.如果是C#做客戶端的話,是需要安裝到客戶機上的.所以還是需要對程序做一下處理,對程序代碼進行代碼混淆.
這里主要使用Obfuscator這個工具,Obfuscator是源碼開源.且也是國人Lex Li(已經(jīng)出國)所寫.
1.在Nuget中,搜索Obfuscator,并進行安裝
在Nuget瀏覽器中,搜索Obfuscator
2.創(chuàng)建obfuscar.xml,并設置該文件為較新復制
在屬性中,設置文件較新復制
3. 在obfuscar.xml中指定配置信息
<?xml version="1.0" encoding="utf-8" ?>
<Obfuscator>
<!--輸入路徑-->
<Var name="InPath" value="." />
<!--輸出路徑:加密混淆過的路徑-->
<Var name="OutPath" value=".\Obfuscator_Output" />
<!--混淆代碼的參數(shù)-->
<Var name="ReuseNames" value="false" />
<Var name="HideStrings" value="false" />
<Var name="KeepPublicApi" value="false" />
<Var name="HidePrivateApi" value="true" />
<!--要混淆的模塊-->
<Module file="$(InPath)\ConsoleApp2.exe" />
</Obfuscator>
參數(shù)信息,可以看這里: https://docs.obfuscar.com/getting-started/configuration.html
4.在程序生成之后調用Obfuscar.通過VS的生成事件實現(xiàn).
在VS中生成后事件,調用Obfusacr 并加載obfuscar.xml
5.在Obfuscator_Output目錄,通過反編譯工具JustDecompilte查看混淆過的程序.
使用反編譯工具JustDecompilte查看混淆過的代碼
Obfuscator可以不在VS中直接使用,Obfuscator是一個單純的代碼混淆工具. 上邊說過Obfuscator代碼是開源的.
在GitHub項目地址: git@github.com:obfuscar/obfuscar.git
在Gitee項目地址: https://gitee.com/junweihuang_admin/obfuscar.git
因為Gitee速度要快于GitHub,如果Gitee上有的話,還是優(yōu)先使用Gitee. 如果Gitee上面沒有的話,就得去Github上.打開Obfuscar.sln解決方案.進行編譯.發(fā)現(xiàn)是無法編譯成功的.發(fā)現(xiàn)Obfuscator依賴Baml項目中.
在Baml項目中,發(fā)現(xiàn)這幾個不存在的.
發(fā)現(xiàn)Baml項目中,有4個文件不存在
在Obfuscator項目中的Obfuscator.cs發(fā)現(xiàn)ILSpy.BamlDecompiler.Baml命名:
發(fā)現(xiàn)了ILSpy.BamlDecompiler.Baml這個命名空間
便懷疑是不是缺的這幾個文件在IlSpy中呀!于是便把IlSpy源碼下載到本地,最終找到了這幾個文件.將這幾個文件拷貝到Baml項目中,嘗試編譯,果真是編譯成功了.
生成后的目錄:
Obfuscar代碼混淆工具,只需要將要混淆的程序放入Input路徑下,在obfuscar.xml修改指定,雙擊run.bat就可以了
Obfuscar.Console.exe使用:
止核心代碼泄露以及代碼合并
每日辛辛苦苦碼的代碼被輕松破解?
機密核心模塊被盜用?
數(shù)據(jù)庫地址和語句暴露?
…… 這些都是由代碼未混淆加密,從而進行泄露的
我們目前DLL文件存在的風險:
一、直接引用
二、反編譯
三、反射
如果DLL一點措施都不做的話,上面任意一種都可以達到破解目的的。
如果通過反編譯軟件:ILSpy、Reflector,輕而易舉,那相當于直接copy代碼了。
那么要怎么樣才能保護我們的代碼呢?
今天帶大家進入代碼的另一個世界,代碼混淆與DLL融合
目錄:
01 混淆原理
反編譯軟件就是能讓你看到代碼,進行Copy使用,那怎么讓它不能看,不能調呢。這個時候就需要說一說模糊處理。
模糊處理:意在引起混淆,實質上是將在代碼中找到的標識符重命名為不可讀的內容。它們可能使用哈希技術,或者對字符集進行算術偏移,將字符變?yōu)椴豢勺x字符或不可輸出字符。這些技術雖然表面上很有效,但是它們都是可逆的,因此很難起到保護作用。
編譯原理
模糊處理這一過程應用于已編譯的 MSIL 代碼而不是應用于源代碼(源代碼不會不會被讀取和更改), 經(jīng)過模糊處理的在功能上等同于你的源代碼,它在公共語言運行庫 (CLR) 上執(zhí)行并產(chǎn)生與原始 MSIL 代碼相同的結果。(但是,它是不可逆的,即使通過反編譯和原始的源代碼相比,它在語義上也將有重大不同。)
Dotfuscator的定位
代碼安全已經(jīng)演變出許多加密、加殼的軟件,如:PreEmptive ,它是得到Micorsoft和Sun公司的認可的以Java和.Net混淆器出名的公司,其中比較出名的軟件: PreEmptive Protection Dotfuscator
Dotfuscator工具,它使用很多其他頗具獨創(chuàng)性的 “ 引起混淆 ”的算法,使得代碼幾乎不能被反編譯(還是存在一定機率可逆,但代價太大,得不償失)。
Dotfuscator工具主要使用模糊處理這種技術能夠對程序集中的符號、變量、字符串等進行無跡可尋的重命名,并提供很多其他手段,從而阻止進行反編譯。
Dotfuscator安裝
VS自帶混淆軟件:Dotfuscator,在VS2019前版本都會自動安裝,2019版本就需要手動安裝了,可搜索: Dotfuscator,預計安裝10分鐘,安裝完成后,需要進行郵箱注冊才可以使用,但非正式版限制太多。
介紹的是一款破解版:DotfuscatorPro 4.9
安裝后使用時,它依賴.Net Framework 2.0和3.5,會進行第一次更新,需確認windows的自動更新服務是打開的
DotfuscatorPro 4.9
02 如何對代碼加密
1、創(chuàng)建新的工程文件。INPUT 選項里 選擇你需要混淆加密的 DLL、EXE文件:
2、進入Settings選項 –> 把 Disable String Encryption 設為 NO,即啟用字符串加密;
檢查 Disable Control flow、Dsiable Renaming 也為 NO,即保證控制流和混淆功能打開,其他默認。
3、進入Rename-> Options選項 勾選“use enhanced overload induction”(使用增強模式),
注意:不要勾選下方的“ Do not suppress on serializable types”,即序列化類型的變量不加密,否則編譯后可能異常;
“Renaming Scheme” 選擇“Unprintable”(不可打印字符,即亂碼),也可以選擇其他如小寫字母、大寫字符、數(shù)字的方式
4、進入String Encryption 選項 include里勾選需要字符串加密的工程文件EXE、DLL等
5、轉入Output目錄,點擊Build,查看輸出結果為 Build Finshed 即為成功。
操作步驟
提醒:編譯過程中可能提示會代碼框架為4.5及以上,需要手動配置編譯環(huán)境的路徑,在Settings ->Porjcet properties 設置編譯環(huán)境地址,如下圖:
反編譯前后對比
Dotfuscator 可對代碼中的變量值進行模糊處理,大大增加閱讀難度,反編譯出來的代碼也如混淆后的代碼
混淆前后對比
甚至連exe文件都能執(zhí)行模糊處理
混淆前后對比
03 代碼融合
有時系統(tǒng)中我們關聯(lián)了太多第三方DLL,以及自身建了多個類庫,等到系統(tǒng)發(fā)布時發(fā)現(xiàn)DLL文件有幾十個,實在太夸張。萬一丟掉一個未復制, 整個程序都無法運行。
微軟推出一款ILMerge打包合并工具,它可以將程序集合并到一個目標程序集中。輸入程序集列表中的第一個程序集是主程序集。當主程序集是可執(zhí)行文件時,目標程序集將創(chuàng)建為具有與主程序集相同的入口點的可執(zhí)行文件。此外,如果主程序集具有強名稱,并且提供了.snk文件,則使用指定的鍵重新簽名目標程序集,以使其具有強名稱。
它是命令行形式運行:
1、打開cmd,轉至安裝目錄(最好是以管理員權限運行)
2、ILMerge.exe /targetplatform:v4,“.NETFramework安裝目錄” /target:winexe /union /xmldocs /copyattrs /allowMultiple /internalize /closed /ndebug /out:“新文件” /log “dll1” “dll2” /log:“日志目錄”
參數(shù)說明:
/targetplatform 輸出文件的.net運行版本
/target 生成的文件,winexe應用程序,library DLL文件
/closed 排除引用文件相互引用
/log 需要合并的DLL或EXE,需要把所有的合并的EXE或DLL囊括進來
/ndebug 為非調試版本,即發(fā)布版本,如果去掉,將會生成.pdb拓展名的調試文件
/log 日志,可以不加
提醒:要集成的程序最好是release過的,不然會出一些莫名其妙的問題。
圖形界面
我們找到一款圖形化界面,可以輕松合并
圖形工具
合并后的反編譯
圖形界面使用: https://jingyan.baidu.com/article/59a015e3204d87f794886529.html
那看到這里,拋出2個問題,供大家討論:
1、打包工具還能做什么呢?
2、混淆加密后真的安全?
上一篇:代碼安全之文件上傳漏洞 下一篇:代碼安全之漏洞掃描
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。