西安青穗信息技術(shù)有限責(zé)任公司
主營(yíng)產(chǎn)品: 安全軟件
Fortify租用-購(gòu)買(mǎi)-價(jià)格-代理商
價(jià)格
訂貨量(0)
面議
≥1
店鋪主推品 熱銷(xiāo)潛力款
莸莻莾莾莼莵莼莾莵莶莻
在線客服
什么是fortify它又能干些什么?
答:fottify全名叫:Fortify SCA ,是HP的產(chǎn)品 ,是一個(gè)靜態(tài)的、白盒的軟件源代碼安全測(cè)試工具。它通過(guò)內(nèi)置的五大主要分析引擎:數(shù)據(jù)流、語(yǔ)義、結(jié)構(gòu)、控制流、配置流等對(duì)應(yīng)用軟件的源代碼進(jìn)行靜態(tài)的分析,分析的過(guò)程中與它特有的軟件安全漏洞規(guī)則集進(jìn)行全面地匹配、查找,從而將源代碼中存在的安全漏洞掃描出來(lái),并給予整理報(bào)告。
2.它支持掃描多少種語(yǔ)言?
答:FortifySCA支持的21語(yǔ)言,分別是:
1. asp.net 2. VB.Net 3. c#.Net 4. ASP 5. VBscript 6. VS6 7.java 8.JSP 9.javascript 10. HTML 11. XML 12. C/C++ 13.PHP 14.T-SQL 15.PL/SQL 16. Action script 17. Object-C (iphone-2012/5) 18. ColdFusion5.0 - 選購(gòu) 19. python -選購(gòu) 20. COBOL - 選購(gòu) 21.SAP-ABAP -選購(gòu)
3.他是免費(fèi)的嗎?
答:不是,是收費(fèi)的。當(dāng)然網(wǎng)上也沒(méi)有破解的。貌似他一個(gè)月收費(fèi)10萬(wàn)。
4.如何使用?
安裝fortify之后,打開(kāi)
界面:
選擇高級(jí)掃描
他問(wèn)要不要更新? 我就選擇No,因?yàn)檫@是我私人的, 我是在2015年7月份購(gòu)買(mǎi)的試用期為1個(gè)月。 怕更新了就用不了了。如果你購(gòu)買(mǎi)了可以選擇YES。
選擇之后出現(xiàn)如下界面
瀏覽意思是:掃描之后保存的結(jié)果保存在哪個(gè)路徑。
然后點(diǎn)擊下一步。
參數(shù)說(shuō)明:
enable clean :把上一次的掃描結(jié)果清楚,除非換一個(gè)build ID,不然中間文件可能對(duì)下一次掃描產(chǎn)生影響。enable translation: 轉(zhuǎn)換,把源碼代碼轉(zhuǎn)換成nst文件-64: 是掃描64位的模式,sca默認(rèn)掃描是32位模式。-Xmx4000m:4000M大概是4G,制定內(nèi)存數(shù)-Xmx4G :也可以用G定義這個(gè)參數(shù)建議加-encoding: 定制編碼,UTF-8比較全,工具解析代碼的時(shí)候指定字符集轉(zhuǎn)換的比較好,建議加,如果中文注釋不加會(huì)是亂碼。-diable-source-:rendering:不加載與漏洞無(wú)關(guān)的代碼到審計(jì)平臺(tái)上,不建議加,這樣代碼顯示不全。
然后點(diǎn)擊下一步
它說(shuō):這是一個(gè)J2EE Web應(yīng)用
選擇No (因?yàn)槟銙叩氖荘HP)
然后scan(開(kāi)始掃描)
Always run in background 意思:總是在后臺(tái)運(yùn)行
run in background 意思:后臺(tái)運(yùn)行
cancel 意思 : 取消
Details 意思:細(xì)節(jié)
掃完之后:
none 代表其他 1個(gè)
A1 注入 7個(gè)
A3 xss 37個(gè)
A4 不安全的直接對(duì)象引用 35個(gè)
A6 敏感數(shù)據(jù)暴露 4個(gè)
A10 未驗(yàn)證的重定向和轉(zhuǎn)發(fā) 2個(gè)
如果發(fā)現(xiàn)是英文的,想改成如下方法中文:
以下是官網(wǎng)提供的分析圖:
分析漏洞:
none漏洞:
這是一個(gè)可變變量,按照中國(guó)人說(shuō)法簡(jiǎn)稱(chēng):“變量覆蓋”。
講一下這個(gè)漏洞的原理:
可變變量
$first ="hello";$hello ="world";echo $first." ".$$first;
結(jié)果是 hello world
$$first就是$hello,因?yàn)?first的值是hello
———————————但是在foreach 就不一樣了—————————————————–
$value) { //如果在foreach那就不一樣了 echo $$key; //將$$區(qū)分開(kāi) 然后$key 等于鍵 然后開(kāi)始合并 比如打開(kāi)http://www.com.com/demo.php?a=值 就變成了$a 因?yàn)?key的鍵是a 所以就變成了$a $$key = $value;//$a = 值 替換變量 }echo '
';echo $a;?>
A1 注入漏洞:
發(fā)現(xiàn)$c變量是由客戶端進(jìn)行GET請(qǐng)求控制的。
safe_replace函數(shù)過(guò)濾如下字符:
function safe_replace($string) {$string = str_replace('%20','',$string);$string = str_replace('%27','',$string);$string = str_replace('%2527','',$string);$string = str_replace('*','',$string);$string = str_replace('"','"',$string);$string = str_replace("'",'',$string);$string = str_replace('"','',$string);$string = str_replace(';','',$string);$string = str_replace('<','<',$string);$string = str_replace('>','>',$string);$string = str_replace("{",'',$string);$string = str_replace('}','',$string);$string = str_replace('//','',$string);return $string;}
include $c.".php"; 但是后面有個(gè).php是拼接的。
但是如果 php版本小于5.3.40 可以采用空字節(jié)也就是%00的二進(jìn)制視作字符串的結(jié)束,按照其他說(shuō)法的話也就是截?cái)?。。。。?/p>
A3 xss 漏洞
$field_sql="update ".DB_PRE."member set {$field_sql} where userid={$last_id}";$query=$this->mysql->query($field_sql);
寫(xiě)入數(shù)據(jù)庫(kù)的時(shí)候沒(méi)有任何限制或者輸出的時(shí)候沒(méi)有做任何的過(guò)濾就直接輸出導(dǎo)致造成了XSS。(我就不一一解釋了)
A4 不安全的直接對(duì)象引用漏洞
文件上傳次數(shù)未做策略,可導(dǎo)致攻擊。
A6 敏感數(shù)據(jù)暴露漏洞:
A10 未驗(yàn)證的重定向和轉(zhuǎn)發(fā)漏洞:
這里我就不去定位看誰(shuí)使用這個(gè)函數(shù)了,懂點(diǎn)PHP的人相信都懂。。
3.2.原文:The catch block handles a broad swath of exceptions,
potentially trapping dissimilar issues or problems
that should not be dealt with at this point in the program..
翻譯:這個(gè)捕捉異常的塊可以處理所有的異常,潛在的陷入了在這段程序中不能處理的不同問(wèn)題。
理解:如果捕捉exception,就不能讓處理異常的邏輯細(xì)化,
也就是所有的異常都按照同樣的邏輯處理是不行的。
13.3.EXPLANATION 解釋
Multiple catch blocks can get ugly and repetitive,
but "condensing" catch blocks by catching a high-level class like Exception can obscure exceptions
that deserve special treatment or that should not be caught at this point in the program.
Catching an overly broad exception essentially defeats the purpose of Java's typed exceptions,
and can become particularly dangerous
if the program grows and begins to throw new types of exceptions.
The new exception types will not receive any attention.
多重的異常捕捉塊可能會(huì)變得丑陋和重復(fù)的,
但是通過(guò)一個(gè)高層異常(比如Exception)"濃縮"的捕捉塊將模糊異常,
這個(gè)異常應(yīng)該有不同的處理,并且在程序的這個(gè)點(diǎn)上不能捕捉到。
捕捉一個(gè)過(guò)分廣泛的異常將從本質(zhì)上違背了Java對(duì)異常分類(lèi)的目的,
如果程序修改并且增加一個(gè)新類(lèi)型的異常,會(huì)變得特別的危險(xiǎn)。
新異常類(lèi)型將不會(huì)接受異常處理。
Example: The following code excerpt handles three types of exceptions in an identical fashion.
例如:下面的代碼摘錄以同樣的方式處理三種異常。
try {
doExchange();
}
catch (IOException e) {
logger.error("doExchange failed", e);
}
catch (InvocationTargetException e) {
logger.error("doExchange failed", e);
}
catch (SQLException e) {
logger.error("doExchange failed", e);
}
At first blush, it may seem preferable to deal with these exceptions in a single catch block,
as follows:
馬上,它可以使用一個(gè)單獨(dú)的捕捉異常塊更好的處理這些異常,像下面:
try {
doExchange();
}
catch (Exception e) {
logger.error("doExchange failed", e);
}
However, if doExchange() is modified to throw a new type of exception
that should be handled in some different kind of way,
the broad catch block will prevent the compiler from pointing out the situation.
Further, the new catch block
will now also handle exceptions derived from RuntimeException such as ClassCastException,
and NullPointerException, which is not the programmer's intent.
但是,如果doExchange()被修改拋出一個(gè)新類(lèi)型的異常,這個(gè)異常需要以一些不同的方式來(lái)處理,
寬泛的捕捉塊將防止編譯器指向這種情況。
更多的,新的捕捉塊現(xiàn)在也可以處理起源于RuntimeException的異常,比如ClassCastException,
和NullPointException,這些都不是程序員的意圖。
13.4.RECOMMENDATIONS 建議
Do not catch broad exception classes like Exception, Throwable, Error,
or <RuntimeException> except at the very top level of the program or thread.
除非在程序或者線程的頂部,不要捕捉寬泛的異常類(lèi),類(lèi)似于:Exception,Throwable,Error,
或者RuntimeException。
13.5.TIPS 提示
Fortify will not flag an overly broad catch block
if the catch block in question immediately throws a new exception.
Fortify不能標(biāo)記一個(gè)過(guò)分寬泛的捕捉塊,
如果這個(gè)捕捉塊有問(wèn)題,馬上就會(huì)拋出一個(gè)新異常。
14. Poor logging practice:logger not declared static final(structual):
14.1.CreditRatingApprovalDisplayUCCImpl.java
private Logger logger = Logger.getLogger
(CustomerManagerTeamBSImpl.class);
原文:Declare loggers to be static and final..
翻譯:定義日志工具必須是static和final的。
14.2.EXPLANATION 解釋
It is good programming practice to share a single logger object
between all of the instances of a particular class
and to use the same logger for the duration of the program.
它是好的編程習(xí)慣,在所有特殊類(lèi)的實(shí)例之間共享一個(gè)單獨(dú)的日志對(duì)象,
并且在程序的持續(xù)時(shí)間中使用相同的日志組件。
Example 1: The following statement errantly declares a non-static logger.
例子1:下面的語(yǔ)句定義了一個(gè)non-static日志組件。
private final Logger logger =
Logger.getLogger(MyClass.class);
14.3.RECOMMENDATIONS 建議
Declare loggers to be static and final.
Example 2: The code in Example 1 could be rewritten in the following way:
定義日志組件為static和final類(lèi)型。
例子2:在例子1中的代碼可以以下面的方式改寫(xiě):
private final static Logger logger =
Logger.getLogger(MyClass.class);
15. Code correctness:null argument to equals(Structual):
SystemCommonParameters.java
if (obj==null||obj.equals(null)) {
15.1.原文:The expression obj.equals(null) will always be false.
翻譯:表達(dá)式obj.equals(null)總是為false.
15.2.EXPLANATION 解釋
The program uses the equals() method to compare an object with null.
This comparison will always return false, since the object is not null.
(If the object is null, the program will throw a NullPointerException).
程序使用equals()方法來(lái)比較對(duì)象和null.
這個(gè)比較將一直返回false,當(dāng)然這是這個(gè)對(duì)象不是null的情況下.
(如果這個(gè)對(duì)象是null,程序?qū)伋鯪ullPointException).
15.3.RECOMMENDATIONS 建議
It is possible that the programmer intended to check to see if the object was null.
可能是,程序員打算去檢查,object對(duì)象是不是null.
Instead of writing 更換下面的寫(xiě)法
obj.equals(null)
they intended 他們打算