这个blog也有这个问题!有时间修改一下。- guoshuang
——————————————————————————–
真是寒啊~
如果不是 Babyken 的提醒,这个错误我想我还会一直犯下去。
事情起因,帮 Babyken 做了一个 0day 查询的脚本,脚本很简单,就是简单的取用户输入的值做 LIKE 操作查询数据库。做好后经测试一直运行很好。可是今天 Babyken 告诉我说有个BUG,输入 “___” 或 “.__” 等类似的关键字时,会把数据库中的所有记录都取出来。
偶又试了以前写过的几个应用,寒,都有这个问题。。。
看起来是SQL本身对LIKE的处理问题。问了几个朋友也都没有注意过。后来在Mysql手册上找到答案:
Pattern matching using SQL simple regular expression comparison. Returns 1 (TRUE) or 0 (FALSE). With LIKE you can use the following two wildcard characters in the pattern:
Char Description
% Matches any number of characters, even zero characters
_ Matches exactly one character
当时感觉就是汗啊~~ 以前怎么自己就没有注意过呢?
解决办法是把用户的输入中的 _ 和 % 转义。
不知道是只是Mysql有这个问题,还是其它数据也有。希望熟悉其它数据库应用的朋友试一下。
相关Mysql说明页面:http://www.mysql.com/doc/en/String_comparison_functions.html
2004年1月16日22时25分补记:
与xdanger探讨后发现,目前网上大部分的PHP+Mysql程序都存在此BUG,IPB和PHPBB也不例外,VBB中被过滤掉了。看起来这应该是一个值得引起重视的问题了。
22:09:22 - avenger -
Comments
呵呵,俺也发现了,不过以前写的都没有处理-_#
Post by freeman @ 02/12/04 08:00:50
1、在把关键字中的_用\_应该就可以了,很多的数据库支持使用别的符号代替来转意,你可以查以下具体数据库的SQL语言参考。
2、多数情况下,即使没有采用这样的措施也不会带来太大的危险,因为允许用户输入关键字进行模糊查询的地方大多数都允许检索所有的记录。很多查询的设计是这样的,当用户不输入关键字的时候默认就是返回所有记录,这和用_进行的检索得到的结果一样。如果用户希望特别查询包含_的记录,就需要进行转意了。查询是只读的操作应该不会对数据产生破坏作用。
不要太担心。
很可惜只能用于apache,iis为什么不赶紧做个类似的东西呢?apache 又小,配置又简单。真想不通微软那么多人在干嘛?更不要说websphere这样的垃圾了!-guoshuang 注
在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令:
order allow,deny
deny from all
URL转向
我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址:
Redirect /旧目录/旧文档名 新文档的地址
或者整个目录的转向:
Redirect 旧目录 新目录
改变缺省的首页文件
一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在pmwiki中是pmwiki.php。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名:
DirectoryIndex 新的缺省文件名
也可以列出多个,顺序表明它们之间的优先级别,例如:
DirectoryIndex filename.html index.cgi index.pl default.htm
防止盗链
如果不喜欢别人在他们的网页上连接自己的图片、文档的话,也可以通过htaccess的指令来做到。
所需要的指令如下:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?mydomain.com/.*$ [NC]
RewriteRule .(gif|jpg)$ - [F]
如果觉得让别人的页面开个天窗不好看,那可以用一张图片来代替:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?mydomain.com/.*$ [NC]
RewriteRule .(gif|jpg)$ http://www.mydomain.com/替代图片文件名 [R,L]
————–
以上学习的内容来自 Comprehensive guide to .htaccess
用上下方向键
b.focus()
[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
很多网页加了屏蔽右键等所谓的加密功能,很烦人。将下面的链接加入收藏或者直接拷贝地址栏。
用这个抓取页面上所有的图片,然后就可以右键保存了。
javascript:str=”";for(i=0;i
显示网页更新日期
javascript:alert(document.lastModified)
显示flash地址
显示网页正文
显示所有链接
等等…
我会不断更新经常会用的一些功能。
得到IP地址的方法是<%=Request.ServerVariables("REMOTE_ADDR")%>,如果客户使用的代理服务器,这样就得到了代理服务器的IP,下面是得到真实IP的代码:
function GetIp()
dim realip,proxy
realip = Request.ServerVariables(”HTTP_X_FORWARDED_FOR”)
proxy = Request.ServerVariables(”REMOTE_ADDR”)
if realip = “” then
GetIp = proxy
else
GetIp = realip
end if
end function
就这么一点,我还以为,哎,改日试验一下。
采用这样的形式即可。
XXX 为你的用户名,参数说明如下:
官方参数说明:
/html/USERNAME/ [?arg=val&arg=val....]
or
/html/USERNAME/TAGNAME [?arg=val&arg=val....]
&count default=15
number of items to show
&extended default=”title”
either “title” or “body”
&divclass default=”delPost”
class to use for div
&aclass default=”delLink”
class to use for link
&tags default=”yes”
show tags or not, either “yes” or “no”
&tagclass default=”delTag”
class to use for tags
&tagsep default=”/”
string to use for separator
&tagsepclass default=”delTagSep”
class to use for separator
&bullet default=”raquo”
html entity to use for bullet, set it to empty to delete
&rssbutton default=”yes”
add an RSS feed button (using CSS)
&extendeddiv default=”no”
extended entry in its own div
&extendedclass default=”"
class to use for extenddeddiv
Text is UTF-8 encoded but is not marked as such; beware.
页面使用的是utf-8编码,却没有标注!切切!(这个很重要,否则中文乱码,如果主文档是gb2312的话)
Please do not cause one hit to delicious per one hit to your site; this will be considered abuse. Use caching or similar.
我用xmlhttp 读取了
http://del.icio.us/html/guoshuang?count=5&rssbutton=no&bullet=
文本流,然后定制了样式表输出。效果如下:
完整的asp代码如下:
<%
Response.Buffer = True
Dim objXMLHTTP, xml
Set xml = Server.CreateObject("Microsoft.XMLHTTP")
' Or, for version 3.0 of XMLHTTP, use:
' Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
xml.Open "GET", "http://del.icio.us/html/guoshuang?count=5&rssbutton=no&bullet=", False
' Actually Sends the request and returns the data:
xml.Send
Response.Write xml.responseText
Set xml = Nothing
%>
生成的html代码如下:
注意里面的 class=”delPost” 和 class=”delLink” 本来就是给我们修改显示样式用的。上面参数部分说的很清楚。