您的位置:

apache防跨站,apache解决跨域

本文目录一览:

用Apache加的网站怎样禁止跨站访问

只有一个办法,分别安装多个apache,并且使用不同的运行账户(默认是system,需要改掉)

如何在Linux下搭建apache服务器

准备篇:

1、配置防火墙,开启80端口、3306端口

vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #允许80端口通过防火墙

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT #允许3306端口通过防火墙

备注:很多网友把这两条规则添加到防火墙配置的最后一行,导致防火墙启动失败,

正确的应该是添加到默认的22端口这条规则的下面

如下所示:

############################## 添加好之后防火墙规则如下所示 ##############################

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

##################################################################################################

/etc/init.d/iptables restart #最后重启防火墙使配置生效

2、关闭SELINUX

vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq #保存,关闭

shutdown -r now #重启系统

安装篇:

一、安装Apache

yum install httpd #根据提示,输入Y安装即可成功安装

/etc/init.d/httpd start #启动Apache

备注:Apache启动之后会提示错误:

正在启动 httpd:httpd: Could not reliably determine the server's fully qualif domain name, using ::1 for ServerName

解决办法:

vi /etc/httpd/conf/httpd.conf #编辑

找到 #ServerName

修改为 ServerName #这里设置为你自己的域名,如果没有域名,可以设置为localhost

:wq! #保存退出

chkconfig httpd on #设为开机启动

/etc/init.d/httpd restart #重启Apache

二、安装MySQL

1、安装MySQL

yum install mysql mysql-server #询问是否要安装,输入Y即可自动安装,直到安装完成

/etc/init.d/mysqld start #启动MySQL

chkconfig mysqld on #设为开机启动

cp /usr/share/mysql/my-medium.cnf /etc/my.cnf #拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可)

2、为root账户设置密码

mysql_secure_installation

回车,根据提示输入Y

输入2次密码,回车

根据提示一路输入Y

最后出现:Thanks for using MySQL!

MySql密码设置完成,重新启动 MySQL:

/etc/init.d/mysqld restart #重启

/etc/init.d/mysqld stop #停止

/etc/init.d/mysqld start #启动

三、安装PHP5

1、安装PHP5

yum install php

根据提示输入Y直到安装完成

2、安装PHP组件,使 PHP5 支持 MySQL

yum install php-mysql php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt

这里选择以上安装包进行安装

根据提示输入Y回车

/etc/init.d/mysqld restart #重启MySql

/etc/init.d/httpd restart #重启Apche

配置篇

一、Apache配置

vi /etc/httpd/conf/httpd.conf #编辑文件

ServerTokens OS  在44行 修改为:ServerTokens Prod (在出现错误页的时候不显示服务器操作系统的名称)

ServerSignature On  在536行 修改为:ServerSignature Off (在错误页中不显示Apache的版本)

Options Indexes FollowSymLinks  在331行 修改为:Options Includes ExecCGI FollowSymLinks(允许服务器执行CGI及SSI,禁止列出目录)

#AddHandler cgi-script .cgi 在796行 修改为:AddHandler cgi-script .cgi .pl (允许扩展名为.pl的CGI脚本运行)

AllowOverride None  在338行 修改为:AllowOverride All (允许.htaccess)

AddDefaultCharset UTF-8 在759行 修改为:AddDefaultCharset GB2312 (添加GB2312为默认编码)

  Options Indexes MultiViews FollowSymLinks 在554行 修改为 Options MultiViews FollowSymLinks(不在浏览器上显示树状目录结构)

DirectoryIndex index.html index.html.var 在402行 修改为:DirectoryIndex index.html index.htm Default.html Default.htm

index.php Default.php index.html.var (设置默认首页文件,增加index.php)

KeepAlive Off 在76行 修改为:KeepAlive On (允许程序性联机)

MaxKeepAliveRequests 100 在83行 修改为:MaxKeepAliveRequests 1000 (增加同时连接数)

:wq! #保存退出

/etc/init.d/httpd restart #重启

rm -f /etc/httpd/conf.d/welcome.conf /var/www/error/noindex.html #删除默认测试页

二、php配置

vi /etc/php.ini #编辑

date.timezone = PRC #在946行 把前面的分号去掉,改为date.timezone = PRC

disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#在386行 列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

expose_php = Off #在432行 禁止显示php版本的信息

magic_quotes_gpc = On #在745行 打开magic_quotes_gpc来防止SQL注入

short_open_tag = ON #在229行支持php短标签

open_basedir = .:/tmp/ #在380行 设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,可以防止php木马跨站,如果改了之后安装程序有问题(例如:织梦内容管理系统),可以注销此行,或者直接写上程序的目录/data/

:wq! #保存退出

/etc/init.d/mysqld restart #重启MySql

/etc/init.d/httpd restart #重启Apche

测试篇

cd /var/www/html

vi index.php #输入下面内容

?php

phpinfo();

?

:wq! #保存退出

在客户端浏览器输入服务器IP地址,可以看到如下图所示相关的配置信息!

注意:apache默认的程序目录是/var/www/html

权限设置:chown apache.apache -R /var/www/html

至此,CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)教程完成!

Apache/PHP环境,怎么防止WebShell啊,头疼

etc/passwd,/etc/init.d目录本来就是所有用户都可以访问的。

与其设置webshell的权限,不如做好web的安全开发,关闭不安全方法;;做好输入校验,输出编码,防止SQL注入,跨站脚本,XSS;以及安全配置,关闭web容器控制台……

另外就是要做好操作系统的安全防护,用户名密码不能太简单,增加防火墙

只要你的webshell不被非法获取,不额外设置webshell有什么关系。

Tomcat怎样防止跨站请求伪造

对于CSRF,可能一些朋友比较陌生。我们下面先简单介绍下。

什么是CSRF呢,我们看下Wikipedia的说明:

Cross-site request forgery,即跨站请求伪造,也称为 "One Click Attach" 或者"Session Riding",常缩写成CSRF。是 通过伪装来自受信任用户的请求来利用受信任的网站 。

其中,说起CSRF,经常会举的一个例子,是这样的:

用户A在访问网上银行,在银行网站里进行了一些操作后。

之后点击了一个陌生的链接。而这个链接,是用户B提供的一个恶意网页W,网页W内也包含访问和用户A相同银行信息的链接,可能是转帐,也可能是修改密码。

此时如果A的认证信息还未过期,就会被直接利用,成功帮助W进行了银行网站的对应操作,而这一切,都是在A不知情的情况下进行的。

为了防范CSRF,常见的方式有:

请求中包含随机token信息

Cookie中包含csrf token信息

其他的验证请求头Refer等...

在Tomcat中,默认提供了一个防范CSRF的好工具: CSRF Prevention Filter 。

Tomcat默认提供了各类的Filter,处理不同的场景和需求。像我们前面介绍过的处理编码的 Tomcat自带的设置编码Filter , 还有进行跨域处理的 Tomcat与跨域问题 等等。今天介绍的CSRF Prevention Filter也是其中的一个。

整个Filter的工作流程可以概括成以下内容:

该Filter为Web应用提供了基本的CSRF 保护。它的filter mapping对应到 /*

并且所有返回到页面上的链接,都通过调用 HttpServletResponse # encodeRedirectURL(String) 或者 HttpServletResponse # encodeURL(String) 进行编码。实现机制是 生成一个token并且将其保存到session中,URL的encode也使用同样的token,当请求到达时,会比较请求中的token和session中的token是否一致,只有相同的才允许继续执行。

我们通过一个例子,深入源码,来了解下内部的实现细节。

还是使用Tomcat自带的Manager应用来看下。

在其 web.xml 中,有这样的配置:

下面的内容是CsrfPreventionFilter的 doFilter 方法,

我们注意到前面的配置里包含一个entryPoints,对照代码,马上就能明白,这项配置用来做类似于exclude的功能,在配置中的映射,可以跳过检查。

而如果没有在entryPoints中,同时在session存在,但不包含对应的Nonce,就会直接返回 403 (SC_FORBIDDEN)。

如果session不存在,就会在doFilter中走到下面的内容:

做为初次请求,会在session中保存对应的Attribute,同时添加到一个LruCache中。这里的重点在于,使用了HttpServletResponseWrapper的子类 CsrfResponseWrapper替换了它做为response传入后续的流程 。

所以,后面所有调用encodeUrl的地方,其实实际调用到的是这个:

public String encodeURL(String url) {

return addNonce (super.encodeURL(url));

}

addNonce对应的,是在传入URL后面增加csrf token或者是nonce的标识,用于后续请求时的识别。

页面具体的编码操作,则是对response的encodeURL的使用,也就是我们上面addNonce的使用:

对应到Manager应用,它的页面是通过Servlet输出的,所以具体的逻辑在Java文件中,我们在页面上的连接观察到,此时获取应用列表的请求URL变成了这样:

? org.apache.catalina.filters.CSRF_NONCE=6BC061DD606D7BA1BDEF7F40657F0C47

每个不在entryPoints中的请求,都会加上org.apache.catalina.filters.CSRF_NONCE=6BC061DD606D7BA1BDEF7F40657F0C47

这种形式的URL输出,就是在页面上调用encodeURL的结果,对应的Manager中的代码是这个样子:

以上,就是CSRF Prevetion Filter实现的原理和细节。当然,上面返回403的地方,以及生成nonce的地方,都可以通过Filter提供的参数来进行配置,分别对应到denyStatus和randomClass。后者需要提供一个Random的实现。

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 = estrdup(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 = estrdup(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/"

如何防止http TRACE 跨站攻击

如果一台 Web Server 支持 Trace 和 / 或 Track 方式,那么它一定存在跨站脚本漏洞,将有可能受到跨站攻击。 Trace 和 Track 是用来调试 Web 服务器连接的 HTTP 方式。

我们通常在描述各种浏览器缺陷的时候,把“Cross-Site-Tracing”(跨站攻击)简称为 XST。

攻击者可以利用此漏洞欺骗合法用户并得到他们的私人信息。

解决方案:禁用 Trace 和 / 或 Track 方式。

针对 Apache,可以借助 mod_rewrite 模块来禁止 HTTP Trace 请求。只要在各虚拟主机的配置文件里添加如下语句:

RewriteEngine on

RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)

RewriteRule .* - [F]

补充其他 Web Server 的解决方案:

1、Microsoft IIS

使用 URLScan 工具禁用 HTTP Trace 请求,或者只开放满足站点需求和策略的方式。

2、Sun ONE Web Server releases 6.0 SP2 或者更高的版本:

在 obj.conf 文件的默认 object section 里添加下面的语句:

Client method="TRACE"

AuthTrans fn="set-variable"

remove-headers="transfer-encoding"

set-headers="content-length: -1"

error="501"

/Client