站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Xoops ORM对象关系映射1
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
===处理转义=== 在上一节的例子中,使用了MyTextSanitizer类对参数进行转义。相关代码如下: <pre> /modules/ormcriteria/index.php $myts = MyTextSanitizer::getInstance(); foreach ($_GET["id"] as $id) { $allcriteria->add(new Criteria("id", $myts->addSlashes($id)), "OR"); } </pre> 转义的原因是消除magic_quotes_gpc设置对参数的影响。 说明:magic_quotes_gpc设置参见[这里] 因此所有的输入参数在使用前,都应该消除该设置对参数的影响。XOOPS系统针对不同的使用方式提供了addSlashes和stripSlashesGPC两个函数,这两个函数都定义在MyTextSanitizer类中。 <pre> /class/module.textsanitizer.php class MyTextSanitizer { function addSlashes($text) {} function stripSlashesGPC($text) {} } </pre> 如果输入参数用于构造条件,则需要调用addSlashes函数,如上例所示。 <pre> /modules/ormcriteria/index.php $allcriteria->add(new Criteria("id", $myts->addSlashes($id)), "OR"); </pre> addSlashes函数保证该参数仅被转义一次,构造出的条件对象不仅符合SQL中参数的要求,还可以避免SQL注入攻击。 如果输入参数需要还原成原值,则需要调用stripSlashesGPC函数。stripSlashesGPC函数保证该参数还原成用户输入的原值。接下来本例讲解如何在XOOPS系统中处理转义。本例的文件夹结构如下: <pre> /modules/ormmyts /class /section.php /images /logo.png /sql /mysql.sql /templates /ormmyts_index.html /index.php /xoops_version.php </pre> 其中xoops_version.php的内容如下: <pre> /modules/ormmyts/xoops_version.php <?php $modversion['name'] = "ORM对象关系映射 - 处理转义"; $modversion['version'] = 0.01; $modversion['description'] = "演示如何使用转义"; $modversion['author'] = <<<AUTHOR 胡争辉 QQ: 443089607 QQMail: hu_zhenghui@qq.com GTalk: huzhengh GMail: huzhengh@gmail.com Skype: huzhenghui" AUTHOR; $modversion['credits'] = ""; $modversion['license'] = "版权所有"; $modversion['image'] = "images/logo.png"; $modversion['dirname'] = "ormmyts"; $modversion["hasMain"] = 1; $modversion["sqlfile"]["mysql"] = "sql/mysql.sql"; $modversion["tables"][] = "ormmyts_section"; $modversion["templates"][0]["file"] = "ormmyts_index.html"; $modversion["templates"][0]["description"] = "Template for index.php"; ?> </pre> 为便于对照学习,本例的数据结构与上例类似,mysql.sql的内容如下: <pre> /modules/ormmyts/sql/mysql.sql CREATE TABLE `ormmyts_section` ( /* 详见源代码 */ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=10 ; </pre> 本例的数据对象及数据访问句柄结构与上例类似,section.php文件的源代码如下: <pre> /modules/ormmyts/class/section.php <?php /* 详见源代码 */ class OrmmytsSection extends ArtObject { function OrmmytsSection () { $this->ArtObject("ormmyts_section"); /* 详见源代码 */ } } class OrmmytsSectionHandler extends ArtObjecthandler { function OrmmytsSectionHandler($db) { $this->ArtObjectHandler($db, "ormmyts_section", "OrmmytsSection", "id"); return; } } ?> </pre> 本例的模板去掉了复选框改为文本框,源代码如下: <pre> /modules/ormmyts/templates/ormmyts_index.html <{strip}> <table> <tr> <!-- 详见源代码 --> </tr> <{foreach item="sectionitem" from=$allsections}> <tr> <!-- 详见源代码 --> </tr> <{/foreach}> </table> <form> <input name="id" /> <input type="submit" /> </form> <{/strip}> </pre> 修改后的界面效果如图2-3处理转义全部结果所示。 <div> [[Image:xop90.png]] </div> 本例中将参数id由复选框改成了文本框,修改相应的处理过程,源代码如下: <pre> /modules/ormmyts/index.php <?php require_once dirname(__FILE__)."/../../mainfile.php"; $sectionhandler = xoops_getmodulehandler("section", "ormmyts"); /* @var $sectionhandler OrmmytsSectionHandler */ $xoopsOption["template_main"] = "ormmyts_index.html"; /* 详见源代码 */ if (true === isset($_GET["id"])) { $myts = MyTextSanitizer::getInstance(); /* @var $myts MyTextSanitizer */ $ids = explode(",", $myts->stripSlashesGPC($_GET["id"])); if (true === is_array($ids)) { foreach ($ids as $id) { if ("" !== trim($id)) { $allcriteria->add(new Criteria("id", addSlashes($id)), "OR"); } } } } /* 详见源代码 */ ?> </pre> 在处理输入参数时,首先用逗号分割输入参数。 $ids = explode(",", $myts->stripSlashesGPC($_GET["id"])); 此处调用MyTextSanitizer类的stripSlashesGPC函数将输入参数id转化为原始数据。由于原始数据中没有对字符转义,因此在设置条件时,又需要强制对参数转义。 $allcriteria->add(new Criteria("id", addSlashes($id)), "OR"); 本例中用PHP提供的addSlashes函数转义,而上例使用MyTextSanitizer类的addSlashes函数转义,区别在于 MyTextSanitizer类的addSlashes函数用于对输入参数直接转义,因此会判断输入参数是否已被转义过,如果被转义过则不再转义,避免两次转义。而PHP的addSlashes函数只转义,不进行额外的判断,因此对于原始数据转义需要使用PHP提供的addSlashes函数,而对输入数据转义需要使用MyTextSanitizer类的addSlashes函数。运行的效果如图2-4处理转义查询结果所示。 <div> [[Image:xop91.png]] </div> 如果没有采用正确的转义方式,不仅有可能无法正确的得到查询结果,而且可能遇到SQL注入能安全性隐患。
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)