ホーム > Ryuji

Ryuji

記事一覧 > スタッフブログ > XOOPS Cubeで運用していたWebサイトをリードオンリーにするハック

XOOPS Cubeで運用していたWebサイトをリードオンリーにするハック

ホームページを運用していると、最初は興味のあるテーマで頻繁に更新していたけれど、だんだんそのテーマに興味が無くなってきて、更新がすっかり止まってしまうということもあります。

バッサリとホームページを閉じてしまうという選択肢もありますが、ネット上にコンテンツを残しておくと誰かの役にたつこともありますよね。

もしXOOPS Cubeで運用していたホームページで、「もう更新しないけど、コンテンツは読めるように残したい」とおもったら、このハックをお試しください。

XOOPS_ROOT_PATH/class/database/mysqldatabase.phpの 244行目あたり、function queryFの冒頭に次の様に記述します。

    function &queryF($sql, $limit=0, $start=0)
	{
		
		// add read only mode
		$sql = ltrim($sql);
		$sql_parts = explode(' ', $sql);
		$first_part = strtolower(trim($sql_parts[0]));
		if (!preg_match('/^(\/\*|select)/', $first_part )){
			if($first_part == 'insert' || $first_part == 'delete'){
				$table_part = trim($sql_parts[2]);
			}else{
				$table_part = trim($sql_parts[1]);
			}
			

			preg_match('/^`?'.XOOPS_DB_PREFIX.'_([^`].+)`?/', $table_part, $match);
			$table_name = $match[1];
			
			if($table_name == 'session'){
				$is_safe = true;
			}else{
				$is_safe = false;
			}
				
			if($is_safe == false){
				$ret = false;
				return $ret;
			}
		}
このハックを適用すると、
ログインに必要なsession テーブルの読み書きはできますが、他のテーブルは全てselect(読み出し)のみになり、記事の更新をしようとすると全部失敗するようになります。

ログインはできますので、ログインユーザにのみが見られるようなコンテンツがある場合でも利用できます。

自分で書き換えるのは面倒であれば、下記からダウンロードして、XOOPS_ROOT_PATH/class/database/mysqldatabase.phpを上書きしてください。

XOOPS Cubeをリードオンリーにするmysqldatabase.php
To Top