分类归档:Web相关

易语言 取SEO信息

.版本 2
.支持库 RegEx
.支持库 internet
.支持库 iext
.子程序 _按钮1_被单击
.局部变量 网页文本, 文本型
.局部变量 表达式, 正则表达式
.局部变量 搜索结果, 搜索结果, , "0"
.局部变量 计次变量, 整数型
.局部变量 文本, 文本型
网页文本 = 到文本 (HTTP读文件 (编辑框1.内容))
网页文本 = 子文本替换 (网页文本, #引号, “'”, 0, , 真)
网页文本 = 到小写 (网页文本)
透明标签1.标题 = 取中间文 (网页文本, “<title>”, “</title>”)
表达式.创建 (“meta (.*?)>”, 假)
搜索结果 = 表达式.搜索全部 (网页文本)
.计次循环首 (取数组成员数 (搜索结果), 计次变量)
    文本 = 搜索结果 [计次变量].取子匹配文本 (网页文本, 1, )
    .判断开始 (寻找文本 (文本, “name='keywords'”, 1, 假) > 0)
        透明标签2.标题 = 取中间文 (文本, “content='”, “'”)
    .判断 (寻找文本 (文本, “name='description'”, 1, 假) > 0)
        透明标签3.标题 = 取中间文 (文本, “content='”, “'”)
    .默认
    .判断结束
.计次循环尾 ()
.子程序 取中间文, 文本型
.参数 全文, 文本型
.参数 左文, 文本型
.参数 右文, 文本型
.局部变量 位置, 整数型
.局部变量 总长度, 整数型
.局部变量 文本, 文本型
总长度 = 取文本长度 (全文)
位置 = 寻找文本 (全文, 左文, , 假)
.如果真 (位置 < 0)
    返回 (“”)
.如果真结束
位置 = 位置 + 取文本长度 (左文)
文本 = 取文本中间 (全文, 位置, 总长度)
总长度 = 取文本长度 (文本)
位置 = 寻找文本 (文本, 右文, , 假) - 1
.如果真 (位置 < 0)
    返回 (“”)
.如果真结束
文本 = 取文本中间 (文本, 1, 位置)
返回 (文本)

 

PHP循环数组

//转换数组
function jiexiArr2($array) 
{ 
    static $result_array=array(); 
    foreach($array as $value) 
    { 
        if(is_array($value)) 
        { 
			if(isset($value['url'])){
				$result_array[]=$value; 
			}else{
				jiexiArr2($value); 
			}
        }
    } 
    return $result_array; 
}

 

function array_multi2array($array) 
{ 
    static $result_array=array(); 
    foreach($array as $value) 
    { 
        if(is_array($value)) 
        { 
            array_multi2array($value); 
        } 
        else  
            $result_array[]=$value; 
    } 
    return $result_array; 
}

 

curl使用详解/curl手册

curl 是使用URL语法的传送文件工具,支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL证书、HTTP POST、HTTP PUT 、FTP 上传,kerberos、基于HTT格式的上传、代理、cookie、用户+口令证明、文件传送恢复、http代理通道和大量其他有用的技巧。详见参考手册

阅读全文 ……

PHP使用curl伪造IP地址和header信息

curl虽然功能强大,但是只能伪造$_SERVER[“HTTP_X_FORWARDED_FOR”],对于大多数IP地址检测程序来说,$_SERVER[“REMOTE_ADDR”]很难被伪造:

首先是client.php的代码

$headers['CLIENT-IP'] = '202.103.229.40';  
$headers['X-FORWARDED-FOR'] = '202.103.229.40'; 

$headerArr = array();  
foreach( $headers as $n => $v ) {  
    $headerArr[] = $n .':' . $v;   
}

ob_start();
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://localhost/curl/server.php");
curl_setopt ($ch, CURLOPT_HTTPHEADER , $headerArr );  //构造IP
curl_setopt ($ch, CURLOPT_REFERER, "http://www.163.com/ ");   //构造来路
curl_setopt( $ch, CURLOPT_HEADER, 1);

curl_exec($ch);
curl_close ($ch);
$out = ob_get_contents();
ob_clean();

echo $out;

然后是server.php

function GetIP(){
    if(!emptyempty($_SERVER["HTTP_CLIENT_IP"]))
        $cip = $_SERVER["HTTP_CLIENT_IP"];
    else if(!emptyempty($_SERVER["HTTP_X_FORWARDED_FOR"]))
        $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    else if(!emptyempty($_SERVER["REMOTE_ADDR"]))
        $cip = $_SERVER["REMOTE_ADDR"];
    else
    $cip = "无法获取!";
    return $cip;
}
echo "<br>访问IP: ".GetIP()."<br>";
echo "<br>访问来路: ".$_SERVER["HTTP_REFERER"];

 

php模拟post提交数据

<?php

//以程序登陆一个论坛登录为例
function bbslogin($user_login, $password, $host, $port = "80") {
	//需要提交的post数据
	$argv = array('cookie' => array('user_login' => $user_login, 'password' => $password, '_wp_http_referer' => '/bbpress/', 're' => '', 'remember' => true));
	foreach ($argv['cookie'] as $key => $value) {
		$params[] = $key . '=' . $value;
	}
	$params = implode('&', $params);
	$header = "POST /bbpress/bb-login.php HTTP/1.1\r\n";
	$header .= "Host:$host:$port\r\n";
	$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
	$header .= "Content-Length: " . strlen($params) . "\r\n";
	$header .= "Connection: Close\r\n\r\n";
	$header .= $params;
	$fp = fsockopen($host, $port);
	fputs($fp, $header);
	while (!feof($fp)) {
		$str = fgets($fp);
		//以下是自己的逻辑代码,这里主要是模拟cookie,可用来同步登陆
		if (!(strpos($str, "Set-Cookie:") === false)) {
			$tmparray = explode(" ", $str);
			$cookiearray = explode("=", $tmparray[1]);
			$cookiepaths = explode("=", $tmparray[6]);
			$cookiename = urldecode($cookiearray[0]);
			$cookievalue = urldecode(substr($cookiearray[1], 0, strlen($cookiearray[1]) - 1));
			$cookietime = time() + 3600 * 24 * 7;
			$cookiepath = urldecode(substr($cookiepaths[1], 0, strlen($cookiepaths[1]) - 1));
			setcookie($cookiename, $cookievalue, $cookietime, $cookiepath);
		}
	}
	fclose($fp);
}
?>

 

<?php 
// PHP POST数据的三种方法
// php有三种方法可以post数据,分别为Curl、socket、file_get_contents:

/**
 * Socket版本
 * 使用方法:
 * $post_string = "app=socket&version=beta";
 * request_by_socket('facebook.cn','/restServer.php',$post_string);
 */
function request_by_socket($remote_server, $remote_path, $post_string, $port = 80, $timeout = 30)
{
	$socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout);
	if (!$socket) die("$errstr($errno)");

	fwrite($socket, "POST $remote_path HTTP/1.0\r\n");
	fwrite($socket, "User-Agent: Socket Example\r\n");
	fwrite($socket, "HOST: $remote_server\r\n");
	fwrite($socket, "Content-type: application/x-www-form-urlencoded\r\n");
	fwrite($socket, "Content-length: " . (strlen($post_string) + 8) . '\r\n');
	fwrite($socket, "Accept:*/*\r\n");
	fwrite($socket, "\r\n");
	fwrite($socket, "mypost=$post_string\r\n");
	fwrite($socket, "\r\n");
	$header = "";
	while ($str = trim(fgets($socket, 4096))) {
		$header .= $str;
	} 
	$data = "";
	while (!feof($socket)) {
		$data .= fgets($socket, 4096);
	} 
	return $data;
} 

/**
 * Curl版本
 * 使用方法:
 * $post_string = "app=request&version=beta";
 * request_by_curl('http://facebook.cn/restServer.php',$post_string);
 */
function request_by_curl($remote_server, $post_string)
{
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $remote_server);
	curl_setopt($ch, CURLOPT_POSTFIELDS, 'mypost=' . $post_string);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_USERAGENT, "Jimmy's CURL Example beta");
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
} 

/**
 * 其它版本
 * 使用方法:
 * $post_string = "app=request&version=beta";
 * request_by_other('http://facebook.cn/restServer.php',$post_string);
 */
function request_by_other($remote_server, $post_string)
{
	$context = array(
		'http' => array(
			'method' => 'POST',
			'header' => 'Content-type: application/x-www-form-urlencoded' .
						'\r\n'.'User-Agent : Jimmy\'s POST Example beta' .
						'\r\n'.'Content-length:' . strlen($post_string) + 8,
			'content' => 'mypost=' . $post_string)
		);
	$stream_context = stream_context_create($context);
	$data = file_get_contents($remote_server, false, $stream_context);
	return $data;
} 

?>

 

隐藏nginx apache和php的版本信息不显示

web server避免一些不必要的麻烦,可以把apache和php的版本信息不显示

隐藏 Apache 版本信息

/etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf

ServerTokens ProductOnly
ServerSignature Off

重启 apache
现在 http 头里面只看到:
Server: Apache

=====================

nginx

#vi nginx.conf
在http 加上 server_tokens off;

如下:

http {
……省略配置
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay on;
server_tokens off;
…….省略配置
}

=======================

隐藏 PHP 版本
php.ini

expose_php On
改成
expose_php Off

重启apache后,php版本在http头中隐藏了。

详解 :

为了防止某些别有用心的家伙窥视我们的服务器,应该做些什么.
我们来看一下相关的2个参数,分别为ServerTokens和ServerSignature,通过控制这2个阀门应该就能起到一些作用,比如我们可以在配置文件中这么写:
ServerTokens Prod
ServerSignature Off

ServerTokens
用 于控制服务器是否相应来自客户端的请求,向客户端输出服务器系统类型或内置模块等重要的系统信息。在主配置文件中提供全局控制默认阀值为”Full” (ServerTokens Full),所以,如果你的Linux发行版本没有更改过这个阀值的话,所有与你的系统有关的敏感信息都会向全世界公开。比如RHEL会将该阀值更改 为”ServerTokens OS”,而Debian依然使用默认的”Full”阀值
以apache-2.0.55为例,阀值可以设定为以下某项(后面为相对应的Banner Header):
Prod >>> Server: Apache
Major >>> Server: Apache/2
Minor >>> Server: Apache/2.0
Minimal >>> Server: Apache/2.0.55
OS >>> Server: Apache/2.0.55 (Debian)
Full (or not specified) default >>> Server: Apache/2.0.55 (Debian) PHP/5.1.2-1+b1 mod_ssl/2.0.55 OpenSSL/0.9.8b

ServerSignature
控制由系统生成的页面(错误信息,mod_proxy ftp directory listing等等)的页脚中如何显示信息。

可在全局设置文件中控制,或是通过.htaccess文件控制
默认为”off”(ServerSignature Off),有些Linux发行版本可能会打开这个阀门,比如Debian在默认的虚拟主机上默认将这个阀门设置为开放
全局阀门的阀值会被虚拟主机或目录单位的配置文件中的阀值所覆盖,所以,必须确保这样的事情不应该发生
可用的阀值为下面所示:
Off (default): 不输出任何页脚信息 (如同Apache1.2以及更旧版本,用于迷惑)
On:输出一行关于版本号以及处于运行中的虚拟主机的ServerName (2.0.44之后的版本,由ServerTokens负责是否输出版本号)
EMail: 创建一个发送给ServerAdmin的”mailto”

注意*上述关于如何设置2个阀门从而尽量减少敏感信息泄露的方法,并不会使你的服务器真的更安全,如果你现在使用的版本比较旧,请务必尽快将系统升级,降低被蠕虫攻击的风险。

 

隐藏server信息

cd /usr/local/src/nginx-0.5.35/src/core/
[root@zyatt core]# cat nginx.h
/*
* Copyright (C) Igor Sysoev
*/
#ifndef _NGINX_H_INCLUDED_
#define _NGINX_H_INCLUDED_
#define NGINX_VERSION      “1.0”
#define NGINX_VER          “LPKWS/” NGINX_VERSION
#define NGINX_VAR          “LPKWS”
#define NGX_OLDPID_EXT     “.oldbin”
#endif /* _NGINX_H_INCLUDED_ */
测试效果
C:\curl-7.18.0>curl.exe -I 211.100.11.122/info.php

HTTP/1.1 200 OK
Server: LPKWS/1.0
Date: Tue, 11 Mar 2008 04:53:02 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
X-Powered-By: PHP/5.2.4

 

还有更彻底的编译安装

修改src/core/nginx.h

#define NGINX_VERSION “1.0.5”

#define NGINX_VER “nginx/” NGINX_VERSION

#define NGINX_VAR “NGINX”

 

修改src/http/ngx_http_header_filter_module.c48-49
static char ngx_http_server_string[] = “Server: nginx” CRLF;
static char ngx_http_server_full_string[] = “Server: nginx” CRLF;

 

修改src/http/ngx_http_special_response.c

staticu_char ngx_http_error_tail[]=”<hr><center>nginx</center>”CRLF

“</body>”CRLF

“</html>”CRLF

;

 

嘿嘿,接下来就编译安装吧!不过修改源码后还有1个地方要修改哦,Nginx的FastCGI配置文件fastcgi.conf

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

常用Web Server版本名称:

Microsoft-IIS
GWS或GFE
Apache

Lighttpd

 

 

 

1. Lighttpd 1.4.20
src/response.c:108 改为:
buffer_append_string_len(b, CONST_STR_LEN(“Server: jufukeji”));
输出 Header:
HTTP/1.1 404 Not Found
Content-Type: text/html
Content-Length: 345
Date: Mon, 12 Jan 2009 13:54:02 GMT
Server: jufukeji

2. Nginx 0.7.30
src/http/ngx_http_header_filter_module.c:48-49 改为:
static char ngx_http_server_string[] = “Server: jufukeji” CRLF;
static char ngx_http_server_full_string[] = “Server: jufukeji” CRLF;
输出 Header:
HTTP/1.1 200 OK
Server: jufukeji
Date: Mon, 12 Jan 2009 14:01:10 GMT
Content-Type: text/html
Content-Length: 151
Last-Modified: Mon, 12 Jan 2009 14:00:56 GMT
Connection: keep-alive
Accept-Ranges: bytes

3. Cherokee 0.11.6
cherokee/version.c:93 添加:
ret = cherokee_buffer_add_str (buf, “jufukeji”);
return ret;
输出 Header:
HTTP/1.1 200 OK
Connection: Keep-Alive
Keep-Alive: timeout=15
Date: Mon, 12 Jan 2009 14:54:39 GMT
Server: jufukeji
ETag: 496b54af=703
Last-Modified: Mon, 12 Jan 2009 14:33:19 GMT
Content-Type: text/html
Content-Length: 1795

4. Apache 2.2.11
server/core.c:2784 添加:
ap_add_version_component(pconf, “jufukeji”);
return;
输出 Header:
HTTP/1.1 200 OK
Date: Mon, 12 Jan 2009 14:28:10 GMT
Server: jufukeji
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: “1920edd-2c-3e9564c23b600”
Accept-Ranges: bytes
Content-Length: 44
Content-Type: text/html

5. Squid 3.0 STABLE 11
src/globals.cc:58 改为:
const char *const full_appname_string = “jufukeji”;
输出 Header:
HTTP/1.0 400 Bad Request
Server: jufukeji
Mime-Version: 1.0
Date: Mon, 12 Jan 2009 15:25:15 GMT
Content-Type: text/html
Content-Length: 1553
Expires: Mon, 12 Jan 2009 15:25:15 GMT
X-Squid-Error: ERR_INVALID_URL 0
X-Cache: MISS from ‘cache.hutuworm.org’
Via: 1.0 ‘cache.hutuworm.org’ (jufukeji)
Proxy-Connection: close

6. Tomcat 6.0.18
java/org/apache/coyote/http11/Constants.java:56 和 java/org/apache/coyote/ajp/Constants.java:236 均改为:
ByteChunk.convertToBytes(“Server: jufukeji” + CRLF);
输出 Header:
HTTP/1.1 200 OK
Server: jufukeji
ETag: W/”7857-1216684872000″
Last-Modified: Tue, 22 Jul 2008 00:01:12 GMT
Content-Type: text/html
Content-Length: 7857
Date: Mon, 12 Jan 2009 16:30:44 GMT

7. JBoss 5.0.0 GA
a. tomcat/src/resources/web.xml:40 改为
jufukeji
b. 下载 JBoss Web Server 2.1.1.GA srctar (http://www.jboss.org/jbossweb/downloads/jboss-web/)
java/org/apache/coyote/http11/Constants.java:56 和 java/org/apache/coyote/ajp/Constants.java:236 均改为:
ByteChunk.convertToBytes(“Server: jufukeji” + CRLF);
将编译所得 jbossweb.jar 覆盖 JBoss 编译输出文件:
JBOSS_SRC/build/output/jboss-5.0.0.GA/server/all/deploy/jbossweb.sar/jbossweb.jar
JBOSS_SRC/build/output/jboss-5.0.0.GA/server/standard/deploy/jbossweb.sar/jbossweb.jar
JBOSS_SRC/build/output/jboss-5.0.0.GA/server/default/deploy/jbossweb.sar/jbossweb.jar
JBOSS_SRC/build/output/jboss-5.0.0.GA/server/web/deploy/jbossweb.sar/jbossweb.jar
输出 Header:
HTTP/1.1 200 OK
Server: jufukeji
X-Powered-By: jufukeji
Accept-Ranges: bytes
ETag: W/”1581-1231842222000″
Last-Modified: Tue, 13 Jan 2009 10:23:42 GMT
Content-Type: text/html
Content-Length: 1581
Date: Tue, 13 Jan 2009 10:30:42 GM

修改nginx server 版本显示信息

修改nginx server 版本显示信息:
将源码包中/nginx-1.0.9/src/http/ngx_http_header_filter_module.c 文件下面2行
48 static char ngx_http_server_string[] = “Server: nginx” CRLF;
49 static char ngx_http_server_full_string[] = “Server: ” NGINX_VER CRLF;
修改为自己想要的
如:
48 static char ngx_http_server_string[] = “Server: Ayhtpd 2.0 ” CRLF;
49 static char ngx_http_server_full_string[] = “Server: Ayhttpd 2.0 ” NGINX_VER CRLF;

2 >vi nginx/src/core/nginx.h
找到如下几行并按照自己的意愿修改,如:
#define nginx_version         0110
#define NGINX_VERSION      “0.1.10”
#define NGINX_VER          “xws/” NGINX_VERSION

#define NGINX_VAR          “XWS”
3> 重新编译安装:

另外一种相对简单的方式是直接修改nginx配置文件隐藏版本号信息
在http段中全局配置加上
server_tokens  off;

WAF通用代码补丁

版本:v1.1
更新时间:2013-05-25
更新内容:优化性能
功能说明

可以有效防护XSS,sql注射,代码执行,文件包含等多种高危漏洞。

使用方法:

  1. 将waf.php传到要包含的文件的目录
  2. 在页面中加入防护,有两种做法,根据情况二选一即可:

 

a).在所需要防护的页面加入代码就可以做到页面防注入、跨站

  1. require_once(‘waf.php’);

如果想整站防注,就在网站的一个公用文件中,如数据库链接文件config.inc.php,来调用本代码。常用php系统添加文件

引用
PHPCMS V9 \phpcms\base.php

PHPWIND8.7 \data\sql_config.php

DEDECMS5.7 \data\common.inc.php

DiscuzX2   \config\config_global.php

WordPress   \wp-config.php

Metinfo   \include\head.php

 

b).在每个文件最前加上代码具体做法是:在php.ini中找到 auto_prepent_file并修改为:

  1. Automatically add files before or after any PHP document;
  2. auto_prepend_file = waf.php路径;

下载地址php_patch   asp

centos安装VNCserver以及火狐和flash插件

1.安装vncserver

install_vnc_server

2. 安装火狐

yum -y install firefox

3.安装flash插件
wget http://fpdownload.macromedia.com/get/flashplayer/pdc/11.2.202.310/install_flash_player_11_linux.x86_64.tar.gz
tar zxvf install_flash_player_11_linux.x86_64.tar.gz
mkdir -p ~/.mozilla/plugins/
cp libflashplayer.so ~/.mozilla/plugins/