一. XSS(跨站腳本攻擊)php
能夠用於竊取其餘用戶的Cookie信息,要避免此類問題,能夠採用以下解決方案:
● 直接過濾全部的JavaScript腳本;
● 轉義Html元字符,使用htmlentities、htmlspecialchars等函數;
● 系統的擴展函數庫提供了XSS安全過濾的remove_xss方法;
● 新版對URL訪問的一些系統變量已經作了XSS處理。html
二:Server相關的配置信息被暴露,未進行模糊處理mysql
1.http {nginx
……省略配置
server_tokens off; ->便可隱藏版本號
…….省略配置
}
重啓nginx後,咱們返回的Server頭格式爲Server:nginx ,並且nginx本身的404頁面也沒有版本號的信息
2.返回自定義的server 混淆Server信息
我是不太願意告訴別人我是使用什麼Server的,但沒有找到相關文獻去隱藏它,因此咱們能夠混淆她,如把Server返回GFW之類的,嚇唬嚇唬那些腳本小子
大部分狀況下,腳本的小子的掃描工具是掃描咱們response返回的header中的server信息.咱們能夠採用編譯源碼的方法來改變返回的Server,筆者的版本是nginx1.7.0,咱們修改src/http/ngx_http_header_filter_module.c 中的48行
static char ngx_http_server_string[] = "Server: nginx" CRLF;
把其中的nginx改成咱們本身想要的文字便可,筆者就改成了GFW. 筆者輸出的Server:GFW.(這個前提是你進行了第一個步句的操做,關閉了版本號)
若是你的版本號是開着的,你又想調戲下腳本小子.好比Server:billgate/1.9.0
咱們修改src/core/nginx.h 定位到13-14行
#define NGINX_VERSION "1.7.0"
#define NGINX_VER "nginx/" NGINX_VERSION
Server返回的就是常量NGINX_VER, 咱們把NGINX_VERSION大小定義爲1.9.0,nginx改成billgate就能達到咱們的目的了sql
三:url_fopen開啓可能致使文件包含漏洞api
php.ini 中的 allow_url_fopen設置爲Off; allow_url_include設置爲Off安全
四:不安全的函數引用cookie
1.不要使用mysql_escape_string,它已被棄用,請使用mysql_real_escape_string代替它。session
/**xss
* SQL指令安全過濾
* @access public
* @param string $str SQL字符串
* @return string
*/
public function escapeString($str) {
if($this->_linkID) {
return mysql_real_escape_string($str,$this->_linkID);
}else{
return mysql_escape_string($str);
}
}
2.split() 替代方案
* 須要regex 的split, 可用preg_split() 代替
* 不須要regex, 只要要快速分割固定的字串, 可用explode() 代替. (速度會比須要regex 的快不少)
五:開放的重定向,跨站攻擊
1.url白名單,對重定向路徑進行驗證
例:
//白名單配置
'LEGAL_URL' => array(
'http://localhost/shenzhen',
'shenzhen',
),
$legalUrls = C('LEGAL_URL');
$isLegal = false;
foreach($legalUrls as $legalUrl){
if(strstr($tourl,$legalUrl)){
$isLegal = true; break;
}
}
if($isLegal){
if (php_sapi_name() === 'cli') {
@header('Location: '.$tourl);
} else {
header('Location: '. $tourl);
}
}
六:SQL注入
1.對參數進行過濾
如:1.$fids = is_array($fids) ? array_unique(array_map( 'intval' , $fids)) : array_unique(array_map( 'intval' , explode(',', $fids)));
2.$data ['table'] = $data ['table_name'] 改成 $data ['table'] = preg_replace("/[^\w|,]/","",t($data ['table_name']));
3.$map [$idField] = $data ['row_id']; 改成 $map [$idField] = intval($data ['row_id']);
七: 未設置cookie的httponly和secure屬性。存在cookie被竊取和篡改的風險。
在PHP文件添加 ini_set("session.cookie_httponly", 1); //開啓全局的httponly
八:越權操做(添加,修改,刪除)
可根據需求而定,對當前操做用戶添加權限驗證。
九: 泄露絕對路徑
對絕對路徑進行加密處理