php中防xss攻击和sql注入详解

XSS攻击

 代码如下 复制代码

任意执行代码
文件包含以及CSRF.
}

关于SQL攻击有很多文章还有各种防注入脚本,但是都不能解决SQL注入的根本问题
见代码:

 代码如下 复制代码

<?php
mysql_connect("localhost","root","123456")or die("数据库连接失败!");
mysql_select_db("test1");
$user=$_post['uid'];
$pwd=$_POST['pass'];
if(mysql_query("SELECT * from where
admin
= `username`='$user' or `password`='$pwd'"){
echo "用户成功登陆..";
} eles {
echo "用户名或密码出错";
}
?>

很简单的一段代码,功能是用于检测用户名或密码是否正确,可是在一些恶意攻击者中提交一些敏感代码.后果可想而知.. post判断注入的方式有2种。
1.在form表单的文本框输入 "or‘1'=1"或者"and 1=1"
在查询数据库的语句就应该是:
SELECT admin from where login = `user`=''or‘1'=1' or `pass`=‘xxxx'
当然也不会出现什么错误,因为or在sql的语句中代表和,或的意思。当然也会提示错误。
当时我们已经发现了可以执行SQL语句之后就可以查询当前表的所有信息。例如:正确的管理员账户和密码进行登录入侵。。
修复方式1:
使用javascript脚本过滤特殊字符(不推荐,指标不治本)
如果攻击者禁用了javascript还是可以进行SQL注入攻击。。
修复方式2:
使用mysql的自带函数进行过滤。
见代码:

 代码如下 复制代码

<?php
// 省略连接数据库等操作。。
$user=mysql_real_escape_string($_POST['user']);
mysql_query("select * from admin whrer `username`='$user'");
?>

既然前面说道了xss攻击,我们再来说说XSS攻击以及防范吧。。
提交表单:

 代码如下 复制代码

<form method="post" action="">
<intup tyep="text" name="test">
<intup tyep="submit" name="sub" value="提交">
</form>

接收文件:

 

 代码如下 复制代码

if(empty($_POST['sub'])){
echo $_POST['test'];
}

很简单的一段代码,在这里只是模拟了下使用场景..
加入攻击者提交

 代码如下 复制代码
<script>alert(document.cookie);</script>

在返回的页面就应该显示当前页面的cookie信息。
我们可以运用到某些留言板上(提前是没过滤的),然后当管理员审核改条信息时盗取COOKIE信息,并发送到攻击者的空间或者邮箱。。攻击者可以使用cookie修改器进行登陆入侵了。。
当然解决方案也有很多。。下面就介绍一个最常用的方式吧。
修复方案1:使用javascript进行转义
修复方案2:使用php内置函数进行转义
代码如下:

 代码如下 复制代码
[code]
if(empty($_POST['sub'])){
$str=$_POST['test'];
htmlentities($srt);
echo $srt;
}
[html]

 
好了,关于SQL注入攻击和XSS攻击的案例与修复方法就讲的差不多了。

时间: 2024-08-04 11:42:29

php中防xss攻击和sql注入详解的相关文章

过滤XSS攻击和SQL注入函数

/** +---------------------------------------------------------- The goal of this function is to be a generic function that can be used to parse almost any input and render it XSS safe. For more information on actual XSS attacks, check out http://ha.c

php mysql_real_escape_string防sql注入详解

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符.下列字符受影响:  代码如下 复制代码 x00 n r ' " x1a 如果成功,则该函数返回被转义的字符串.如果失败,则返回 false. 易利用下面的这个函数,就可以有效过滤了.  代码如下 复制代码 function safe($s){ //安全过滤函数 if(get_magic_quotes_gpc()){ $s=stripslashes($s); } $s=mysql_real_es

php防止SQL注入详解及防范_php技巧

一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出).这两个重要的步骤缺一不可,需要同时加以特别关注以减少程序错误.对于攻击者来说,进行SQL注入攻击需要思考和试验,对数据库方案进行有根有据的推理非常有必要(当然假设攻击者看不到你的源程序和数据库方案),考虑以下简单的登录表单: 复制代码 代码如下: <form action="/login.php" method="POST"><p>Userna

一些简单sql注入与防止sql注入详解

如果把用户输入到一个网页,将其插入到MySQL数据库,有机会离开了发生安全问题被称为SQL注入敞开.这一课将教如何帮助防止这种情况的发生,并帮助保护脚本和MySQL语句. 注入通常发生在处理一个用户输入,如他们的名字,而不是一个名字,他们给一个会在不知不觉中你的数据库上运行的MySQL语句. 永远不要信任用户提供的数据,只能验证后处理这些数据,作为一项规则,这是通过模式匹配.在下面的例子中,用户名被限制为字母数字字符加下划线的长度在8到20个字符之间 - 根据需要修改这些规则.  代码如下 复制

xss防御之php利用httponly防xss攻击

 这篇文章主要介绍了xss防御之php利用httponly防xss攻击,下面是PHP设置HttpOnly的方法,需要的朋友可以参考下 xss的概念就不用多说了,它的危害是极大的,这就意味着一旦你的网站出现xss漏洞,就可以执行任意的js代码,最可怕的是攻击者利用js获取cookie或者session劫持,如果这里面包含了大量敏感信息(身份信息,管理员信息)等,那完了...   如下js获取cookie信息:    代码如下: url=document.top.location.href; coo

浅析白盒审计中的字符编码及SQL注入(1)

尽管现在呼吁所 有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如gbk,作为自己默认的编码类型.也有一些cms为了考虑老用户, 所以出了gbk和utf-8两个版本.498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="浅析白盒审计中的

php中$_GET与$_POST过滤sql注入的方法_php技巧

本文实例讲述了php中$_GET与$_POST过滤sql注入的方法,分享给大家供大家参考.具体分析如下: 此函数只能过滤一些敏感的sql命令了,像id=1这种大家还是需要自己简单过滤了. 主要实现代码如下: 复制代码 代码如下: if (!get_magic_quotes_gpc()) { if (!empty($_GET)) { $_GET  = addslashes_deep($_GET); } if (!empty($_POST)) { $_POST = addslashes_deep($

JavaScript中的依赖注入详解

 这篇文章主要介绍了JavaScript中的依赖注入详解,本文讲解了requirejs/AMD方法.反射(reflection)方法等内容,需要的朋友可以参考下     计算机编程的世界其实就是一个将简单的部分不断抽象,并将这些抽象组织起来的过程.JavaScript也不例外,在我们使用JavaScript编写应用时,我们是不是都会使用到别人编写的代码,例如一些著名的开源库或者框架.随着我们项目的增长,我们需要依赖的模块变得越来越多,这个时候,如何有效的组织这些模块就成了一个非常重要的问题.依赖

Spring中属性注入详解_java

本文演示了int.String.数组.list.set.map.Date等属性的注入. 其中Date类型的注入则是借助了Spring提供的属性编辑器来实现的,首先是用到的五个实体类 package com.jadyer.model; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; /** * 常见属性的注入 * @see 包括int,String,Array,lis