gpt4 book ai didi

从 cookie 登录 php - 一些 SQL 注入(inject)预防示例

转载 作者:行者123 更新时间:2023-11-29 03:41:36 25 4
gpt4 key购买 nike

我编写了一个简单的 PHP 应用程序 (MyApp),允许用户使用 Evernote 的 PHP SDK 登录他们的 Evernote 帐户。但是,在我的应用程序中,我想这样做:

  1. 用户同意 Evernote 登录
  2. MyApp 接收#1 的 requestToken、requestTokenSecret 等。
  3. MyApp 将 #2 存储到 cookie 和 $_SESSION
  4. 当用户稍后返回我的网站时,MyApp 会通过 cookie 将他们登录

是的,我知道这种基于 cookie 的登录是不安全的。但是,我的应用程序不存储任何敏感数据。最简单的方法是什么?这是我的尝试:

//if cookie
if (isset($_COOKIE['requestToken'])) {
$m = new mysqli(MYSQL_SERVER, MYSQL_USER, MYSQL_PASS, MYSQL_DB);
$q = "SELECT uid FROM users WHERE token={$_COOKIE['requestToken']} and secret={$_COOKIE['requestTokenSecret']}";

// cookie matches db?
if ($result = $m->query($q)) {
$_SESSION['login']=TRUE;
$result->close();
}
else // no match
$_SESSION['login']=FALSE;
}
else { //no cookie - create
if (EverNoteLogin()) {
$year=time()+86400*365; //86400 = 1 day
setcookie('requestToken',$_SESSION['requestToken'],$year);
setcookie('requestTokenSecret',$_SESSION['requestTokenSecret'],$year);
}
}

建议的改进版本

//if cookie
if (isset($_COOKIE['requestToken'])) {
//check db
$m = new mysqli(MYSQL_SERVER, MYSQL_USER, MYSQL_PASS, MYSQL_DB);
$s=$m->prepare("SELECT uid FROM user WHERE token=? AND secret=?");
$s->bind_param('ss',$rt, $rs);
$rt=$_COOKIE['requestToken'];
$rs=$_COOKIE['requestTokenSecret'];
$s->execute();
$s->store_result();
$n=$s->num_rows;
//match db?
if ($n) {
if ($n==1) { // 1 match
$s->bind_result($uid);
$_SESSION['uid']=$uid;
$_SESSION['login']=TRUE;
}
else
$_SESSION['login']=FALSE; // >1 match not good
}else
$_SESSION['login']=FALSE;
}
else { //no cookie - create
if (EverNoteLogin()) {
$year=time()+86400*365; //86400 = 1 day
setcookie('requestToken',$_SESSION['requestToken'],$year);
setcookie('requestTokenSecret',$_SESSION['requestTokenSecret'],$year);
}
}

最佳答案

我认为从 SQL 注入(inject)的角度来看,使用准备好的语句的脚本版本看起来很合适。

我当然也建议您将 cookie 设置为安全 cookie(因此需要 https 连接)和仅 http cookie(从而防止访问 javascript 等)。

关于从 cookie 登录 php - 一些 SQL 注入(inject)预防示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13187919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com