当前位置:首页 » 编程语言 » php防扒

php防扒

发布时间: 2023-04-28 11:41:07

‘壹’ php如何做好最基础的安全防范

PHP如何做好最基础的安全防范

php给了开发者极大的灵活性,但是这也为安全问题带来了潜在的隐患,PHP如何做好最基础的安全防范呢?下面我为大家解答一下,希望能帮到您!

当开发一个互联网服务的时候,必须时刻牢记安全观念,并在开发的代码中体现。PHP脚本语言对安全问题并不关心,特别是对大多数没有经验的开发者来说。每当你讲任何涉及到钱财事务等交易问题时,需要特别注意安全问题的考虑,例如开发一个论坛或者是一个购物车等。

安全保护一般性要点

不相信表单

对于一般的javascript前台验证,由于无法得知用户的行为,例如关闭了浏览器的javascript引擎,这样通过POST恶意数据到服务器。需要在服务器端进行验证,对每个php脚本验证传递到的数据,防止XSS攻击和sql注入。

不相信用户

要假设你的网站接收的每一条数据都是存在恶意代码的,存在隐藏的威胁,要对每一条数据都进行清理

关闭全局变量

在php.ini文件中进行以下配置:

register_globals = Off

如果这个配置选项打开之后,会出现很大的安全隐患。例如有一个process.php的脚本文件,会将接收到的数据插入到数据库,接收用户输入数据的表单可能如下:

< input name="username" type ="text" size = "15" maxlength = "64" >

这样,当提交数据到process.php之后,php会注册一个$username变量,将这个变量数据提交到process.php,同时对于任何POST或GET请求参数,都会设置这样的变量。如果不是显示进行初始化那么就会出现下面的问题:

<?php

// Define $authorized = true only if user is authenticated

if

(authenticated_user()) {

$authorized = true;

}

?>

此处,假设authenticated_user函数就是判断$authorized变量的值,如果开启了register_globals配置,那么任何用户都可以发送一个请求,来设置$authorized变量的值为任意值从而就能绕过这个验证。所有的这些提交数据都应该通过PHP预定义内置的全局数组来获取,包括$_POST、$_GET、$_FILES、$_SERVER、$_REQUEST等,其中$_REQUEST是一个$_GET/$_POST/$_COOKIE三个数组的联合变量,默认的顺序是$_COOKIE、$_POST、$_GET。

推荐的安全配置选项

error_reporting设置为Off:不要暴露错误信息给用户,开发的时候可以设置为ON

safe_mode设置为Off

register_globals设置为Off

将以下函数禁用:system、exec、passthru、shell_exec、proc_open、popen

open_basedir设置为 /tmp ,这样可以让session信息有存储权限,同时设置单独的网站根目录expose_php设置为Offallow_url_fopen设置为Offallow_url_include设置为Off

SQL注入攻击

对于操作数据库的SQL语句,需要特别注意安全性,因为用户可能输入特定语句使得原有的SQL语句改变了功能。类似下面的例子:

$sql ="select * from pinfo where proct = '$proct'";

此时如果用户输入的$proct参数为:'39'; DROP pinfo; SELECT 'FOO

那么最终SQL语句就变成了如下的`样子:

select proct from pinfo where proct = '39';

DROP pinfo;

SELECT 'FOO'

这样就会变成三条SQL语句,会造成pinfo表被删除,这样会造成严重的后果。这个问题可以简单的使用PHP的内置函数解决:

$sql = 'Select * from pinfo where proct = '"' mysql_real_escape_string($proct) . '"';

防止SQL注入攻击需要做好两件事:对输入的参数总是进行类型验证对单引号、双引号、反引号等特殊字符总是使用mysql_real_escape_string函数进行转义但是,这里根据开发经验,不要开启php的Magic Quotes,这个特性在php6中已经废除,总是自己在需要的时候进行转义。

防止基本的XSS攻击

XSS攻击不像其他攻击,这种攻击在客户端进行,最基本的XSS工具就是防止一段javascript脚本在用户待提交的表单页面,将用户提交的数据和cookie偷取过来。XSS工具比SQL注入更加难以防护,各大公司网站都被XSS攻击过,虽然这种攻击与php语言无关,但可以使用php来筛选用户数据达到保护用户数据的目的,这里主要使用的是对用户的数据进行过滤,一般过滤掉HTML标签,特别是a标签。下面是一个普通的过滤方法:

function transform_HTML( $string , $length null) { // Helps prevent XSS attacks

// Remove dead space.

$string = trim( $string );

// Prevent potential Unicode codec problems.

$string = utf8_decode( $string );

// HTMLize HTML-specific characters.

$string = htmlentities( $string , ENT_NOQUOTES);

$string = str_replace ( "#" , "#" , $string );

$string = str_replace ( "%" , "%" , $string );

$length = intval ( $length );

if ( $length > 0) {

$string = substr ( $string , 0, $length );

}return $string ;

}

这个函数将HTML的特殊字符转换为了HTML实体,浏览器在渲染这段文本的时候以纯文本形式显示。如bold会被显示为: BoldText 上述函数的核心就是htmlentities函数,这个函数将html特殊标签转换为html实体字符,这样可以过滤大部分的XSS攻击。但是对于有经验的XSS攻击者,有更加巧妙的办法进行攻击:将他们的恶意代码使用十六进制或者utf-8编码,而不是普通的ASCII文本,例如可以使用下面的方式进行:

这样浏览器渲染的结果其实是:

< a href = "http://host/a.php?variable=" >

< SCRIPT >Dosomethingmalicious

这样就达到了攻击的目的。为了防止这种情况,需要在transform_HTML函数的基础上再将#和%转换为他们对应的实体符号,同时加上了$length参数来限制提交的数据的最大长度。

使用SafeHTML防止XSS攻击

上述关于XSS攻击的防护非常简单,但是不包含用户的所有标记,同时有上百种绕过过滤函数提交javascript代码的方法,也没有办法能完全阻止这个情况。目前,没有一个单一的脚本能保证不被攻击突破,但是总有相对来说防护程度更好的。一共有两个安全防护的方式:白名单和黑名单。其中白名单更加简单和有效。一种白名单解决方案就是SafeHTML,它足够智能能够识别有效的HTML,然后就可以去除任何危险的标签。这个需要基于HTMLSax包来进行解析。安装使用SafeHTML的方法:

1、前往http://pixel-apes.com/safehtml/?page=safehtml 下载最新的SafeHTML

2、将文件放入服务器的classes 目录,这个目录包含所有的SafeHTML和HTMLSax库

3、在自己的脚本中包含SafeHTML类文件

4、建立一个SafeHTML对象

5、使用parse方法进行过滤

<?php/* If you're storing the HTMLSax3.php in the /classes directory, along

with the safehtml.php script, define XML_HTMLSAX3 as a null string. */define(XML_HTMLSAX3, '' );// Include the class file.require_once ( 'classes/safehtml.php' );

// Define some sample bad code.

$data = This data would raise an alert

" ;// Create a safehtml object.$safehtml = new safehtml();// Parse and sanitize the data.$safe_data = $safehtml ->parse( $data );// Display result. echo 'The sanitized data is ' . $safe_data ;

?>

SafeHTML并不能完全防止XSS攻击,只是一个相对复杂的脚本来检验的方式。

使用单向HASH加密方式来保护数据

单向hash加密保证对每个用户的密码都是唯一的,而且不能被破译的,只有最终用户知道密码,系统也是不知道原始密码的。这样的一个好处是在系统被攻击后攻击者也无法知道原始密码数据。加密和Hash是不同的两个过程。与加密不同,Hash是无法被解密的,是单向的;同时两个不同的字符串可能会得到同一个hash值,并不能保证hash值的唯一性。MD5函数处理过的hash值基本不能被破解,但是总是有可能性的,而且网上也有MD5的hash字典。

使用mcrypt加密数据MD5 hash函数可以在可读的表单中显示数据,但是对于存储用户的信用卡信息的时候,需要进行加密处理后存储,并且需要之后进行解密。最好的方法是使用mcrypt模块,这个模块包含了超过30中加密方式来保证只有加密者才能解密数据。

<?php$data = "Stuff you want encrypted" ;

$key = "Secret passphrase used to encrypt your data" ;

$cipher = "MCRYPT_SERPENT_256" $mode = "MCRYPT_MODE_CBC" ;function encrypt( $data, $key , cipher , $mode ) {// Encrypt datareturn (string) base64_encode ( mcrypt_encrypt ( $cipher , substr (md5( $key ),0,mcrypt_get_key_size( $cipher , $mode )), $data , $mode , substr (md5( $key ),0,mcrypt_get_block_size( $cipher , $mode )) ) );

}function decrypt( $data , $key ,$cipher , $mode ) {// Decrypt data

return (string) mcrypt_decrypt ( $cipher , substr (md5( $key ),0,mcrypt_get_key_size( $cipher , $mode )), base64_decode ( $data ), $mode , substr (md5( $key ),0,mcrypt_get_block_size( $cipher , $mode )) );

}?>

mcrypt函数需要以下信息:

1、待加密数据

2、用来加密和解密数据的key

3、用户选择的加密数据的特定算法(cipher:

如 MCRYPT_TWOFISH192

,MCRYPT_SERPENT_256, MCRYPT_RC2

, MCRYPT_DES

, and MCRYPT_LOKI97

4、用来加密的模式

5、加密的种子,用来起始加密过程的数据,是一个额外的二进制数据用来初始化加密算法

6、加密key和种子的长度,使用mcrypt_get_key_size函数和mcrypt_get_block_size函数可以获取如果数据和key都被盗取,那么攻击者可以遍历ciphers寻找开行的方式即可,因此我们需要将加密的key进行MD5一次后保证安全性。同时由于mcrypt函数返回的加密数据是一个二进制数据,这样保存到数据库字段中会引起其他错误,使用了base64encode将这些数据转换为了十六进制数方便保存。

;

‘贰’ php怎么防止抓包工具

我是做数据采集的,
在我看来,除了输入验证码 , 没有什么能对我起到很好的防采集,

一般大的网站都是采用 网页加入一次性随机值 ,再有前端JS 生成秘钥 ,最后一并提交加密了的数据 ,这种没什么效果 。对一般的人可以做下防御 。但是,我只要找出它的JS加密函数 。 使用一个JS服务器(node.js),或php的 php 改写的js加密实现过程 ,加密初始值,再模拟发送 。所以,这个也没什么多大作用 。

对于验证码 ,一般简单的都可以程序识别 ,复杂的提交到前台让手动输入 。再一并发送。 这种用户体验不好。 慎行。

总的来说,建议用JS 加密吧 。
但是,还是防御不了。

我一般用 filefox 的 filebug 或 小提琴工具 。
目前大半年了,没有破解不了的网站 。

我用我的php程序 ,可以操作你的网站 。实现 用户操作 我的php程序 ,我的php程序 再去操作源网站 。

你可以去研究下 58同城网 的登录 。那里面一堆的加密 。 在我看来都是垃圾代码 。 我的程序一键登录进去。

‘叁’ php防止sql注入的函数介绍

具体用法

addslashes防止SQL注入

虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入 还是建议大家加强中文防止SQL注入的检查 addslashes的问题在 于黑客 可以用 xbf 来代替单引号 而addslashes只是将 xbf 修改为 xbf c 成为一个有效的多字节字符 其中的 xbf c仍会 被看作是单引号 所以addslashes无法成功拦截

当然addslashes也不是毫无用处 它是用于单字节字符串的处理 多字节字符还是用mysql_real_escape_string吧

另外对于php手册中get_magic_quotes_gpc的

举例

代码如下

<?php function post_check($post) { if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否为打开 { $post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤 } $post = str_replace("_" "_" $post); // 把 _ 过滤掉 $post = str_replace("%" "%" $post); // 把 % 过滤掉 $post = nl br($post); // 回车转换 $post= specialchars($post); // 标记转换 return $post; } ?>

<?php function inject_check($sql_str) { return eregi( select|insert|update|delete| | function verify_id($id=null) { if (!$id) { exit( 没有提交参数! ); } // 是否为空判断 elseif (inject_check($id)) { exit( 提交的参数非法! ); } // 注射判碰仔肆断 elseif (!is_numeric($id)) { exit( 提交的参数非法! ); } // 数字判断 $id = intval($id); // 整型化 return $id; } ?>

string mysql_real_escape_string ( string $unescaped_string [ resource $link_identifier ] )

本函数将 unescaped_string 中的特殊字符转义 并计及连接的笑轿当前字符集 因此可以安全用于 mysql_query()

Note: mysql_real_escape_string() 并不转义 % 和 _

mysql_real_escape_string

Example# mysql_real_escape_string() 例子

代码如下

<?php $item = "Zak s and Derick s Laptop" ; $escaped_item = mysql_real_escape_string ( $item ); printf ( "Escaped string: %sn" $escaped_item ); ?>

以上例子将产生如下输出

Escaped string: Zak s and Derick s Laptop

mysql_escape_string

本函数将 unescaped_string 转义 使之可以安全用于 mysql_query()

注: mysql_escape_string() 并不转义 % 和 _

本函数和 mysql_real_escape_string() 完全一样 除了 mysql_real_escape_string() 接受的是一戚并个连接句柄并根据当前字符集转移字符串之外 mysql_escape_string() 并不接受连接参数 也不管当前字符集设定

例子 mysql_escape_string() 例子

代码如下

<?php $item = "Zak s Laptop"; $escaped_item = mysql_escape_string($item); printf ("Escaped string: %sn" $escaped_item); ?> 输出 Escaped string: Zak s Laptop

mysql_real_escape_string和mysql_escape_string这 个函数的区别

mysql_real_escape_string 必须在(PHP >= PHP )的情况下才能使用 否则只能用 mysql_escape_string 两者的区别是 mysql_real_escape_string 考虑到连接的当前字符集 而mysql_escape_string 不考虑

我们可以利用判断来综合处理

代码如下 function cleanuserinput($dirty){ if (get_magic_quotes_gpc()) { $clean = mysql_real_escape_string(stripslashes($dirty)); }else{ $clean = mysql_real_escape_string($dirty); } return $clean; }

总结一下

* addslashes() 是强行加;

* mysql_real_escape_string() 会判断字符集 但是对PHP版本有要求;

lishixin/Article/program/PHP/201311/21094

‘肆’ 怎么用php把一整套网站扒下来

仿站小工具+V8.2

‘伍’ php文件如何防止被下载

下载也看不到源代码的.下载的是转译过的HTML代码.
如果你担心你的源代码安全,可以用safeguard加密一下.

‘陆’ php文件能不能扒下来

可以扒,但前提是别人得允许你访问,你得获取开放地址。

PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,早谈局尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语侍野法,并根据它们的长项持续改进提升自己。

例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。PHP同时支持面向对象和面向过程的开发,使用上非常灵活。

经过二十多年的发展,随着php-cli相关组件的快速发展和完善,PHP已经可以应用在TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等非 Web 领域的系陆让统研发。

‘柒’ 如何实现php整站下载

现在网上的整站下载器只能下载html,css,js,图片,php代码和数据库只能进到服务器里才能看到,所以想要下载出后台文件基本是不可能的。

IIS7整站下载器可以有下述功能:1、可多站同时下载、多站同时扒
2、可单页扒
3、可自定义, 重写JS\图片\CSS路径
4、执行全站下载后,会下载到本程序根目录下的html文件夹下。
5、全站替换,根据关键词替换。N个(多个)关键词替换。
6、多线程下载
7、自动补齐404不存在的链接页面(下载大站的时候需要)
8、插入自定义的JS(全站插入)
9、整站下载
10、单页下载

‘捌’ 我想扒一个很漂亮的站点下来做为自己的模版,但是wordpress是.php文件我扒下来的是html文件怎么搞!

像你说的直接把其他程序如DEDE,陪吵PHPCMS的模板拿来给WP使用是不可能的。

WP是不支持HTML的,你只能把HTML改写成PHP调用,也就是仿模板。这是个技术活,但不是很难,你只需要一张首页静态页面:index.html,包括它的图片等,一个CSS代码,就可以修改成WP的模板。在这里我说下简单的原理:就是把index.html拆分成index.php(主体),header.php(顶部),footer.php(底部),sidebar.php(边栏)等等。

姿宴HTML代码生成的网页是完整的一页,而对于WP来说,当你写一篇文章生成一个网页的时候,实际上WP是调用了我上面说的这些位置的PHP代码(代码部分用的大部分是WP程序自带的PHP命令,所迹乱银以不能和DEDE等其它程序共用模板),整合成这样的一个页面。

热点内容
cl加密狗 发布:2024-11-01 10:28:52 浏览:610
php建网站 发布:2024-11-01 10:07:37 浏览:566
利用旧电脑搭建自己的私有云服务器 发布:2024-11-01 10:07:24 浏览:608
dl388p服务器怎么换硬盘 发布:2024-11-01 10:02:12 浏览:254
云服务器可以打游戏嘛 发布:2024-11-01 09:49:49 浏览:582
编程聚会 发布:2024-11-01 09:38:51 浏览:898
7z压缩密码 发布:2024-11-01 09:38:50 浏览:660
sql字符串去掉空格 发布:2024-11-01 09:27:27 浏览:17
c语言学生通讯录 发布:2024-11-01 09:26:22 浏览:286
门线告警算法 发布:2024-11-01 09:24:58 浏览:522