我是一位正在学习Ruby的noob程序员,我决定编写一个SERP检查器。事情是,我很小心,我不知道如何去做,所以我发现了一个脚本在线,但它是用PHP编写的。一位朋友帮我理解了它的第一部分,在那里他发现了剧本的很多问题。但是,由于我的朋友很忙,他无法帮助我“破译”脚本的第二部分。了解PHP中的一些代码
我能够在Ruby中编写直到$ i = 0,现在我卡住了。我试图弄清楚脚本其余部分发生了什么。 有这些线路,特别是挡板我,我认为我可以处理其余的,,但已包括它所有(底部),在这种情况下,我没有给予足够的信息。
$keyword_implode = str_replace(' ','+',$keywords[$i]);
$fetch_url = "http://www.google.com/search?num=50&q=" . $keyword_implode . "&btnG=Search";
ob_start();
include_once($fetch_url);
$page = ob_get_contents();
ob_end_clean();
我看着就php.net为的例子str_replace函数上的一些信息,并没有真正像(我)任何的例子,所以我想他正试图用什么来代替弄清楚。
这里是整个脚本:
<?php
if ($_POST['url'] != '') {
if (strpos($_POST['keyword'],"\n")) {
$keywords = str_replace("\n",",",$_POST['keyword']);
$keywords = explode(",",$keywords);
} else {
$keywords[0] = $_POST['keyword'];
}
$keyword_input = $_POST['keyword'];
$url = $_POST['url'];
}
$i = 0;
if ($keywords[$i] != '') {
while ($keywords[$i] != '') {
$keyword_implode = str_replace(' ','+',$keywords[$i]);
$fetch_url = "http://www.google.com/search?num=50&q=" . $keyword_implode . "&btnG=Search";
ob_start();
include_once($fetch_url);
$page = ob_get_contents();
ob_end_clean();
$page = str_replace('<b>','',$page);
$page = str_replace('</b>','',$page);
//preg_match('/008000\">(.+)<\/font><nobr>/i', $page, $match);
preg_match_all('/<font color=#008000>(.*)<\/font>/', $page, $match);
$r = 0;
$position = '0';
while ($match[0][$r] != '') {
if ($position == '0') {
if (strpos($match[0][$r],$url)) {
$position = $r+1;
}
}
$r++;
}
$google_position = $position;
$keyword_table .= '
<tr>
<td>' . $keywords[$i] . '</td>
<td>' . $google_position . '</td>
</tr>';
$i++;
}
$keyword_table = '
<table class="result-table" cellspacing="1">
<tr>
<th>Keyword</th>
<th>Google</th>
</tr>' . $keyword_table . '
</table>';
}
?>
这里是我到目前为止写的,用Ruby:
require 'sinatra'
require 'rspec'
get '/serp_checker' do
"<form action='/ranked' method='post'>
<label for='keyword'>Keyword</label>
<textarea name='keyword' id='keyword' type='text' /></textarea>
<label for='url'>URL</label>
<input name='url' id='url' type='text' />
<input type='submit' value='Go!' />
</form>"
end
def clean_up_keywords(str)
str.gsub("\n", ",").delete("\r").split(',')
end
def clean_up_list(arr)
arr.reject(&:empty?).each(&:lstrip!)
end
post '/ranked' do
dirty_list = clean_up_keywords(params[:keyword])
clean_list = clean_up_list(dirty_list)
return clean_list.to_s
end
对不起这个被这么久了,我只是想描述整个问题,以便我不会忘记提供有关问题的重要信息。
您的PHP脚本会打开**巨大的安全漏洞**。如果谷歌输出包含PHP标签,它将在您的服务器上执行。使用'$ data = file_get_contents($ url);'来检索远程数据而不是'include'! – ThiefMaster 2011-05-05 08:28:15
使用str_replace,他用+符号替换空格,这样字符串变成URL兼容,如果这是您唯一的问题。 – 2011-05-05 08:30:09
@ThiefMaster是的,这是帮助我删除了很多其他东西的人的脚本。那里还有其他一些疯狂的东西。我的朋友没有仔细检查代码,因为他有事要做。但是,我从来不知道有关安全漏洞,所以感谢您的分享。告诉我关于blip的+1。 – 2011-05-05 08:42:13