TP仿sql注入

二、仿sql注入

SEO: 

1,如果优化的话 title部分是非常重要的,用来优化我们网站的关键字的

搜索引擎会根据关键字对你的网站归类,如果网站权重高的话,当用户搜索关键字的时候,会先看到你的网站

2,日与网站---指向英文的网站,说明日语的网站给英文的投了一票,如果给英语的网站投的票越多,说明英文的网站越好

站群:

 

 

 

防止SQL注入:

1,建一个用户登录的表单

select()  会查询出所有的记录

find()    只会查询一条记录

写一个简单的用户名验证,在用户名表单中写上’or 1 or’也会提示用户名正确,

思考题:为什么会不验证就成功了?

echo $model->getLastsql();//打印出sql语句

经过查询执行的sql语句,我们发现,导致sql注入的原因是单引号

因为:

1,通过php的魔术引号,来将用户输入的数据进行转义

php的低版本,默认是开启的,这样会自动的将用户输入的数据进行转义

php.ini中的

是开启的改为

Magic_quotes_gpc=On

就可以防止验证正确

2,对用户提交的数据进行转义

调用phpaddslashes()函数

$username=addslashes($_POST['username']);addslashes函数处理一下

3,利用thinkphp的系统变量获得外部数据 $this->_server

 thinkphp系统常量 (4)

$this->_post('username','addslashes');

4,使用数组作为tp框架中 where条件

5、直接把查询语句写成

$list=$model->where('user_name="'.$username.'" and dept_id="'.$password.'"')->select();就不会登陆成功了

 

例:

//仿sql注入
public function login(){
 $this->display();
 }
public function verify(){
 //用户名'or 1 or'登录会提示登录成功,是不正确的
 //方法1修改ini.php
 $username=$_POST['username'];
 $password=$_POST['password'];
 //方法2
 /*$username=addslashes($_POST['username']);
 $password=$_POST['password'];
 //方法3
 $this->_post('username','addslashes');
 $password=$_POST['password'];
 //方法4数组
 $cond['user_name']=$username;
 $cond['dept_id']=$password;
 $list=$model->where($cond)->find();*/
 
 $model=M('User');
 //方法5
    // $list=$model->where('user_name="'.$username.'" and dept_id="'.$password.'"')->select();
  $list=$model->where("user_name='$username' and dept_id='$password'")->select();
  echo $model->getLastsql();//打印出sql语句
  if($list){
   echo '登录成功';
   }else{
    echo '登录失败';
    }
  
 }

 

 

tpl:

<form action="__URL__/verify" method="post">
用户名:<input type="text" name="username">
密码:<input type="text" name="password">
<input type="submit" value="提交">
</form>

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 ThinkPHP 5 中,可以采取以下措施来防止 SQL 注入攻击: 1. 使用查询构造器(Query Builder):ThinkPHP 提供了查询构造器,可以使用链式操作来构建安全的 SQL 查询语句。查询构造器会自动对输入参数进行转义和处理,从而防止 SQL 注入。 示例代码: ```php use think\Db; $data = Db::table('users') ->where('username', $username) ->where('password', $password) ->find(); ``` 2. 使用参数绑定:在使用原生 SQL 查询时,可以使用参数绑定来代替直接拼接用户输入的值到 SQL 查询语句中。参数绑定会自动对输入进行转义,从而防止 SQL 注入。 示例代码: ```php use think\Db; $data = Db::query('SELECT * FROM users WHERE username = :username', ['username' => $username]); ``` 3. 使用预处理语句(Prepared Statements):类似于原生的 PHP,ThinkPHP 也支持使用预处理语句来防止 SQL 注入。可以使用 `execute` 方法执行预处理语句。 示例代码: ```php use think\Db; $stmt = Db::connect()->prepare('SELECT * FROM users WHERE username = :username'); $stmt->bindValue(':username', $username); $stmt->execute(); $data = $stmt->fetch(); ``` 4. 数据验证和过滤:对用户输入进行验证和过滤,确保输入数据符合预期的格式和类型。可以使用 ThinkPHP 提供的验证器功能或者手动进行验证和过滤。 示例代码(使用验证器): ```php use think\facade\Validate; $validate = Validate::rule([ 'username' => 'require', 'password' => 'require', ]); if (!$validate->check($data)) { // 验证失败 } // 继续处理数据 ``` 需要注意的是,以上方法仅仅是防止 SQL 注入的基本措施,对于复杂的应用程序还需要综合考虑其他安全性措施,并定期更新和维护应用程序以防止新的安全漏洞。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值