多种方式安装django搭建环境

三种安装方式:
1.pip方式
apt-get install python-pip #安装pip
pip install Django #或者 pip install Django==1.6.10 或者 pip install Django==***
2.系统源获取安装
apt-get install python-django -y #源方式 安装
3.下载本地安装
#https://www.djangoproject.com/download/ 下载 django-***.tar.gz
tar -xvzf django-***.tar.gz
cd django-***
python setup.py install

win下安装使用命令方法:
cd python27/Script/#在该目录下执行
python django-admin.py startproject demo #创建demo项目,在当前目录下会生成demo名称的项目
python django-admin-script.py startapp testapp #创建app项目,与上面会在同级目录下是错误的,app应该在项目路径下

#当前项目管理路径
python manage.py migrate #数据库同步
python manage.py flush? #数据库清空

python manage.py createsuperuser #创建超级管理员
python manage.py changepassword username #修改用户密码

python manage.py dumpdata appname > appname.json #导出数据
python manage.py loaddata appname.json #导出数据

python manage.py shell #项目环境终端
python manage.py dbshell #数据库命令行

Kali下安装django使用命令方法:
django-admin startproject app_pro #创建app_pro项目 /root/app_pro
django-admin startapp testapp #创建app? /root/testapp,应该切换到项目目录,同级目录下创建app是错误的

#当前项目路径,默认为:/root/当前目录下项目管理 app_pro

./manage.py runserver 8000 #不写端口则默认为8000端口,也可以自定义
./manage.py flush #清空当前数据库,要配置数据库后才能操作
./manage.py createsuperuser #创建超级管理员,同上
#dumpdata appname > appname.json && loaddata appname.json #导出数据
#支持的命令如下:
[auth]
changepassword
createsuperuser

[django]
cleanup
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
reset
runfcgi
shell
sql
sqlall
sqlclear
sqlcustom
sqlflush
sqlindexes
sqlinitialdata
sqlreset
sqlsequencereset
startapp
startproject
syncdb
test
testserver
validate

[staticfiles]
collectstatic
findstatic
runserver

Python 中级进阶学习笔记

面对对象部分:
class Student(object) #Student继承object类
def __init__(self, name, score): #类似前置函数、构造函数
self.name = name? #设置属性
self.score = score
#self.__plus = plus #private局部变量的写法,__变量名
#感觉python的多态和派生都和c++差不多,具体在django用一下才晓得
python的类可以多重继承,也可以派生(object1,object2,…)java不能派生,c++可以派生
python还有抽象类,即 类库的模版,以后要写接口的时候,可以再配个实例

调试部分:
try:
#执行语句
except:
#异常时执行
logging.basicConfig(filename=’error.log’)
logging.exception(“Exception Logged”) #logging.exception(e) 为记录错误
finally:
#按照程序流程,执行完上面的后再执行这里的语句
#调试方法+经验 print() exit() type() 下断点,拿出数据检查

文件部分:
文件读写防止IO产生错误的写法#无需关闭文件
with open(‘/file’, ‘a’) as fp:
print(fp.read())
#fp.close()
fp.readline() #每次读取文件的一行
fp.readlines() #返回一个列表,每一个元素为一行
for line in fp.readlines():
print(line.strip()) # 把末尾的’\n’删掉
fp.write() #写操作
memory_fp = StringIO() #在内存中写文件
memory_fp.getvalue() #获取内存的文件数据
BytesIO() #在内存中写二进制文件

系统部分:
os.uname() #查看当前操作系统
os.environ #查看当前操作系统环境变量
os.mkdir() #创建目录
os.rmdir() #删除目录
os.path.join() #合并路径,处理不同操作系统兼容性
os.path.split()#拆分路径
os.path.abspath(‘.’)#查看当前绝对路径
os.path.splitext() #获取文件的扩展名
os.rename(‘test.txt’, ‘test.py’) #重命名文件名
os.remove(‘test.py’) #删掉文件

pickle.dumps() #把任意对象序列化写入内存
pickle.dump() #序列化后写入指定文件
pickle.loads() #内存中读取反序列化对象
pickle.load()? #文件中读取反序列化对象
json.dumps() #打印json对象
json.dump() #把json对象写入文件

进程部分:
os.getpid()#获取父进程id,类似c++的句柄
pid = os.fork() #子进程,只能用于linux内核,win内核是消息循环机制
from multiprocessing import Process #跨平台的多进程库Process()/start()/join()
Queue #进程通讯库
threading #线程库,要给线程睡眠时间
current_thread()#当前线程
MainThread #主线程 实例名
lock = threading.Lock() #线程锁 lock.acquire() 获取锁、lock.release() 释放锁 #容易造成死锁
threading.local() #全局线程对象

网络部分:
#长连接
#导入socket库:
import socket
#创建一个socket:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#建立连接:
s.connect(‘127.0.0.1′, 80)
#发送数据:
s.send(b’GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n’)
#接受数据
d = s.recv(1024) #接受字节数
#关闭连接:
s.close()
#监听端口:
s.bind((‘127.0.0.1’, 9999))
#连接最大数
s.listen(5)
#接受一个连接
s.accept()
#UDP短连接

数据库部分:
sqlite3 #sqlite库
mysql.connector #mysql驱动库
还是觉得mysql合适,做客户端的时候再考虑用sqlite了。

HTTP响应状态码大全

100:继续 客户端应当继续发送请求。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应
101: 转换协议 在发送完这个响应最后的空行后,服务器将会切换到在 Upgrade 消息头中定义的那些协议
102:继续处理 由 WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行
200:请求成功
201:请求完成,结果是创建了新资源
202:请求被接受,但处理尚未完成
204:服务器端已经实现了请求,但是没有返回新的信息
300:该状态码不被 HTTP/1.0 的应用程序直接使用, 只是作为 3XX 类型回应的默认解释
301:请求到的资源都会分配一个永久的 URL,这样就可以在将来通过该 URL 来访问此资源
302:请求到的资源在一个不同的 URL 处临时保存
304:请求的资源未更新
400:非法请求
401:未授权
403:禁止
404:没有找到页面
500:服务器内部错误 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理
501:服务器无法识别 服务器不支持当前请求所需要的某个功能
502:错误网关 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应
503:服务出错 由于临时的**服务器**维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复

实现手机客户自动跳转代码

实现手机客户自动跳转代码,如下:

function checkMobile(){
var isiPad = navigator.userAgent.match(/iPad/i) != null;
if(isiPad){
return false;
}
var isMobile=navigator.userAgent.match(/iphone|android|phone|mobile|wap|netfront|x11|java|opera mobi|opera mini|ucweb|windows ce|symbian|symbianos|series|webos|sony|blackberry|dopod|nokia|samsung|palmsource|xda|pieplus|meizu|midp|cldc|motorola|foma|docomo|up.browser|up.link|blazer|helio|hosin|huawei|novarra|coolpad|webos|techfaith|palmsource|alcatel|amoi|ktouch|nexian|ericsson|philips|sagem|wellcom|bunjalloo|maui|smartphone|iemobile|spice|bird|zte-|longcos|pantech|gionee|portalmmm|jig browser|hiptop|benq|haier|^lct|320x320|240x320|176x220/i)!= null;
if(isMobile){
return true;
}
return false;
}
function _getCookie(cname){
var cookieStr = document.cookie.match("(?:^|;)\\s*" + cname + "=([^;]*)");
return cookieStr ? unescape(cookieStr[1]) : "";
}
var URL_MAP = [
["invogue/style-pk/", "invogue/"],
["invogue/dream-ticket/", "invogue/"],
["invogue/high-street/", "invogue/"],
["invogue/vogue-style/", "invogue/"],
["invogue/dress-q/", "invogue/"],
["invogue/accessory/", "invogue/"],
["invogue/brand-journey/", "invogue/"],
["invogue/industry/", "invogue/"],
["invogue/brand-news/", "invogue/"],
["invogue/vogue-office/", "invogue/"],
["invogue/street-chic/", "street-chic/"],
["invogue/image-mania/", "image-mania/"],
["beauty/makeup/", "beauty/"],
["beauty/new-in-store/", "beauty/"],
["beauty/howto/", "beauty/"],
["beauty/celeb-beauty/", "beauty/"],
["beauty/skincare/", "beauty/"],
["beauty/fitness/", "beauty/"],
["beauty/hair/", "beauty/"],
["beauty/editor-pick/", "beauty/"],
["beauty/brand-news/", "beauty/"],
["beauty/fragrance/", "beauty/"],
["beauty/street-styling/", "street-chic/"],
["people/celeb-style/", "people/"],
["people/best-worst/", "people/"],
["people/party/", "people/"],
["people/icons/", "people/"],
["people/red-carpet/", "people/"],
["people/talk-of-town/", "people/"],
["people/models/", "people/"],
["people/star-spot/", "street-chic/"],
["shoes-bags/", "shoes-bags/"],
["jewelry-watch/season-jewelry/", "jewelry/"],
["jewelry-watch/season-watch/", "watch/"],
["magazine/current-issue/", "magazine/"]
];
function _getCookie(cname){
var cookieStr = document.cookie.match("(?:^|;)\\s*" + cname + "=([^;]*)");
return cookieStr ? unescape(cookieStr[1]) : "";
}
(function(){
if(checkMobile()){
if( _getCookie("visitWWW")!=="visited" ){
var thisHost = "http://"+location.hostname;
var thisHREF = document.URL, request_uri = thisHREF.substr(thisHost.length+1), reg;

if(thisHREF==”http://www.0535code.com”||thisHREF==”http://www.0535code.com/”||thisHREF==”http://0535code.com/”){
window.location.href=”http://m.0535code.com/”;
}else{
for(var i=0; i<URL_MAP.length-1; i++){
reg = new RegExp(“^” + URL_MAP[i][0], “i”);

console.log(reg.test(request_uri))
if(reg.test(request_uri)){
request_uri = request_uri.replace(URL_MAP[i][0], URL_MAP[i][1]);
window.location.href = “http://m.0535code.com/” + request_uri;
}
}
}
}
}
})();

把上面代码保存为JS后缀,在首页包含即可。
<script type=”text/javascript” src=”js/shouji.js”></script>

微信公众平台申请开发者代码

微信公众平台申请开发者代码

<?php
define ( "TOKEN", "longyun55521" );   //这里是TOKEN与在微信公众平台填写的应该对应。当然这个可以随便写,相当于这里是密码,申请时候填写的是重复密码。
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
 
class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];        //随机字符串
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }
    private function checkSignature() {
      $signature = $_GET ["signature"];
      $timestamp = $_GET ["timestamp"];
      $nonce = $_GET ["nonce"];
      $token = TOKEN;
      $tmpArr = array (
            $token,
            $timestamp,
            $nonce
      );
      sort ( $tmpArr );
      $tmpStr = implode ( $tmpArr );
      $tmpStr = sha1 ( $tmpStr );
 
      if ($tmpStr == $signature) {
        return true;
      } else {
        return false;
      }
    }

}

然后把这个php文件上传到服务器,如果路径是http://www.0535code.com/Demo.php 那网址就要填写这个,即可通过开发者验证。

JS弹窗代码实现

无意的一次机会想到一个商业点子,想在别人打开网站的时候,第一先打开页面,第二直接打开咨询对话框,然后想去实现,不过基于浏览器的安全机制,只能实现部分,或者换方法了,先看下下面的弹窗代码:

<html>
<head>
<script LANGUAGE="javascript">
<!--
function openwinxp() {
window.open ("page.html", "newwindow", "height=100, width=400,toolbar=no,menubar=no, scrollbars=no, resizable=no, location=no, status=no")
}
//-->
</script>
</head>
<body onload="openwinxp()">
...任意的页面内容...
</body>
</html>

就是在打开页面到body区了,开始触发openwinxp函数,这就是弹窗代码,但是用IE或者其他浏览器打开页面,会弹出提醒,是否需要打开另外一个页面,有些浏览器比如谷歌浏览器,直接就阻止了,那这种方式实现就不太好了,只有换个实现方法,可以把这个页面当成框架,嵌入客户打开的那个页面,这样算起来就是一个页面了。想不到更好的办法,只想到这个了。大家有好的思路欢迎一起探讨。

为学员检测网站

昨天晚上,QQ上学校的一学员,告诉我她老公的网站,其他的就不多说了吧,我看到网站后,检测了一下安全方面,连最简单的漏洞都没修补,网站是这个:http://www.cxqq.com下面开始检测一下了。
第一:首先先要找到后台,当然也可以直接找上传漏洞,这个我找了一下,没找到,然后就选择先找后台吧,一般的后台都会是admin,admin/login.asp,login.asp,admin.asp,manage等等就不一一列举了,这个可以用黑客工具,明小子或者啊D注入检测出后台,这个网站,检测到了后台地址是http://www.cxqq.com/manage? 找到后台了后,测试弱口令,弱口令就是万能钥匙,? 帐号:’or’’=’’or’ 密码:’or’’=’’or’?? 帐号和密码都是’or’’=’’or’,看了下他这个网站有验证码,在这里顺便一起说下网站后台的安全方面的知识吧,网站后台如果直接就是用户名和密码,然后没别的了,黑客可以暴力破解出你的帐号和密码,所以说帐号和密码设置的复杂一点比较好,不过设置的复杂一点,这样还是会被暴力破解的,只是时间问题了,在这里说一下我知道的网站后台安全三方面
1.?首先要保证你的后台的安全,别设置一些admin等常用目录,那样黑客直接用工具就可以扫到后台了,然后密码设置的复杂一点;
2.?然后就是在后台认证中加上验证码,这样就可以防止黑客的暴力破解,可以暴力破解,但是每次都要输入验证码,现在貌似一般黑客还写不出自动获取验证码并填写的程序,所以这样做是为了暴力破解;
3.?其实上面两个已经够安全了,如果还不放心可以再加一道防线,或者直接用这个,不用第二个也可以,这种方法叫做IP验证,就是如果一个外网IP登陆超过几次,就不可以登陆了,这样也是限制了暴力破解,除非你的罪黑客了,非要拿下你的站,那网站做的安全了,还可以入侵服务器呢,不过起码的保护我们要做好。。。
检测出了网站后台,然后用弱口令去尝试,我试过了。弱口令不管用,那只有找其他办法了…
? 第二:找注入点,这个也可以用啊D或者明小子检测的,或者手工去检测吧,and 1=1和and 1=2 如果一个返回正常网页,一个返回不正常网页,说明存在注入点,注入点就是可以通过这个 asp?id=? 这类的网页,直接操作数据库,上面那个网站,找到了好几个注入点,先说其中一个吧:
http://www.cxqq.com/cn/cpshow.asp?id=672&sort=82
通过他直接操作数据库,下面的任务就是猜解表名了,然后猜解字段名,然后登陆后台找备份数据库或者上传漏洞,拿服务器,这就是入侵asp网站其中的一种方法了,还有其他的暴力破解FTP,等等就不一一列举了,www.cxqq.com 这个网站,只用工具猜解到了表名,下面的字段名字就没猜解到了,如果有专业的黑客字典,肯定会猜解到了,然后按照上面的步骤,入侵这个网站很简单,这是我学校一个学员给我他对象的一个网站,我帮友情检测的,希望站长修补一下漏洞以防黑客非法入侵。。。

在这里再说一下手工入侵网站的步骤吧,当然用工具要明白了原理,然后才会手工检测,只会用工具,那不叫黑客,黑客这是个什么概念呢,想知道就自己百度去,嘿嘿。。。下面说下整理的入侵asp网站的步骤吧 。。。

第一: 查找注入点,? and 1=1? 和?? and 1=2
第二: 读表,?????? and (select count (*) from admin)
第三: 读字段,???? and (select count (username) from admin)
第四:? 查询记录,?? order by 37
第五:? 爆破用户名,
union select
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37
from admin
第六: 爆破密码,
union select 1,2,username,password,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37
from admin
这就是六部了,我不是专业的黑客,只是了解而已,希望菜鸟们学会了技术不要破坏政府等公益性网站,当然老鸟肯定不会无聊的去入侵别人的网站了,因为中国的黑客也是很强大的,www.0535code.com学习编程从此变的轻松起来,我们的风格不是死学习,不是要程序玩转自己,而是自己学会学习,学会怎么让程序变得好玩,程序只要好玩了,那什么将都不再难了。。。嗯嗯,今天对于入侵网站就写到这里了。。。

Dedecms 360网站安全卫士100%漏洞修复

Dedecms 360网站安全卫士100%漏洞修复,按照官方的程序是100%的安全的,昨天去版权后360网站卫士提示有sql漏洞,是因为只注释掉加密字符串,后面的特殊操作一起注释掉就会100%安全了,不在提示sql注册漏洞了。

/*
$arrs1 = array(0x63,0x66,0x67,0x5f,0x70,0x6f,0x77,0x65,0x72,0x62,0x79);
$arrs2 = array(0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,
0x77,0x77,0x77,0x2e,0x64,0x65,0x64,0x65,0x63,0x6d,0x73,0x2e,0x63,0x6f,0x6d,0x20,0x74,0x61,0x72,
0x67,0x65,0x74,0x3d,0x27,0x5f,0x62,0x6c,0x61,0x6e,0x6b,0x27,0x3e,0x50,0x6f,0x77,0x65,0x72,0x20,
0x62,0x79,0x20,0x44,0x65,0x64,0x65,0x43,0x6d,0x73,0x3c,0x2f,0x61,0x3e);

//特殊操作
if(isset($GLOBALS[‘arrs1’]))
{
$v1 = $v2 = ”;
for($i=0;isset($arrs1[$i]);$i++)
{
$v1 .= chr($arrs1[$i]);
}
for($i=0;isset($arrs2[$i]);$i++)
{
$v2 .= chr($arrs2[$i]);
}
$GLOBALS[$v1] .= $v2;
}

*/

为什么会这样呢?后面的特殊操作看起来像是解密程序。本地运行了下结果,就是版权了。如下图:

Dedecms版权

phpweb Fatal error: Cannot redeclare class pages in

phpweb Fatal error: Cannot redeclare class pages in 0 … 错误解决方案:
标题带有翻页或检索的插件每页只能放置一个,否则会导致页面出错,该页报错无法访问,出现Fatal?error:?Cannot?redeclare?class?pages错误!
页面添加插件后提示Fatal?error:?Cannot?redeclare?class?pages的解决办法
进入ftp,找到页面所属模块的文件夹,如地址栏是product/class,文件夹就是product,更名product下的module文件夹下的ProductGlobalQuery.php,文章的就是?news下的module下的NewsGlobalQuery.php文件。?然后进入排版状态,删除带翻页插件(插件名字带检索或翻页)至只剩一个,将先前更名过的文件夹名字改回即可。

Snoopy.class.php 批量提交表单代码

<?php
include "Snoopy.class.php";
$snoopy = new Snoopy;

$submit_url = "http://ssptp.com/order/submit.php";    //提交url ,下面是一个数组存放提交内容
$submit_vars["client_name"] = "去你妹!";
$submit_vars["telephone"] = "去你妹!";
$submit_vars["client_address"] = "去你妹!";
$submit_vars["client_qq"] = "去你妹!";
$submit_vars["buy_num"] = "1";
$submit_vars["pay_type"] = "1";
$submit_vars["remark"] = "去你妹!去你妹!去你妹!去你妹!去你妹!去你妹!去你妹!去你妹!";

for($i=0;$i<=100;$i++){
  if($snoopy->submit($submit_url,$submit_vars)){
 echo "第".$i."次执行成功!"."<br />";
  }
}
 
?>