vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 2.x Full Releases (https://vborg.vbsupport.ru/forumdisplay.php?f=4)
-   -   if() vBCode - Private Post Text Hack (https://vborg.vbsupport.ru/showthread.php?t=48492)

Slynderdale 02-02-2003 10:00 PM

if() vBCode - Private Post Text Hack
 
Important News: This hack is now out of beta testing and is now in alpha.

What this hack does, is add a if() vB Code where you can enter formulas that if true, the user will be able to see the private text in the post, if it shows up false, its hidden from the users sight. This hack doesnt use any queries at all. Also the if() vB Code also supports other vB Codes inside of it.

The formulas can contain both functions and varibles such as $bbuerinfo[userid] or strtolower(), you can add a list of allowed functions to it and all others functions that arent allowed are removed from the code to prevent security issues.

All security issues and exploits have now been fixed. This hack has settings where you can allow all users to use it or just allow admins to use it. Theres also a setting that you can change to allow admins to see all the private text in posts even if they normaly cant see it.

The code part of the vB Code ( if(code) ) uses the same syntax as php script, so if you wanna check if a varible equals something, you must use == instead of =, also all varibles from $bbuserinfo also have there own varible, what i mean by this is that $bbuserinfo[username] is also $bbusername and $bbuserinfo[posts] is also $bbposts, with these specail varibles, it is optional to add a $ in front of it, so $bbusername and bbusername will both work.

Also theres a feature where admins can see the forumula that was used next to the text "Private Text:", it is shown is (code used here), other members will just see "Private Text:".

Examples of the If() vB Code:
[if($bbuserid>0)]Thank you for joining![/if]
[if(bbuserid>0)]Thank you for joining![/if]

[if($bbusername=="Admin")]Whats up?[/if]
[if(bbusername=="Admin")]Whats up?[/if]

[if($ourtimenow>=$post[dateline]+((7*24)*60*60))]Text To Display 1 week from this post[/if]

[if(bbuserid>0 and bbposts>100)]Keep up the posting :)[/if]

[if(bbusergroupid==6 or bbusergroupid==7)]Important Text[/if]



Important: New Update as of March 16th
I recoded the doif function and fixed it up and added editable options for and also a bug that Nuclion encountered:
Admin Only
Admin can read all private text
Allowable functions that you can use
Certain accounts that can see all the private texts
Admins allowed to use all php functions

https://vborg.vbsupport.ru/showthrea...167#post367167
The text below already contains the fix.

Important: New Update as of February 8th
I fixed a bug, that when you search your forums, the if() tag shows even if you cant view it.

https://vborg.vbsupport.ru/showthrea...808#post351808
The text below already contains the fix.

Also I hope you enjoy the hack, If you have any problems, ideas, or just feedback, feel free to post.

Screenshots:
Heres a screenshot of a test post I did with the if() vB Code, the user who made the post can see all the private text in the post by default.
https://vborg.vbsupport.ru/attachmen...&postid=350154
(Note: The private text table can esily be edited in the "privatetext_style" style in headinclude after the hack is installed:

Heres a screen shot of the same post but after I logged out, so this is what the guest would see.
https://vborg.vbsupport.ru/attachmen...&postid=350155

I only have one request if you install this hack, please click Install, Thank You.

Slynderdale 02-03-2003 09:05 PM

Heres a screen shot of a post where you can view them

Slynderdale 02-03-2003 09:07 PM

Heres a screen shot of the same post but as a guest with a guest message.

ULTIMATESSJ 02-03-2003 09:25 PM

heh quite a clever idea, nice work

Slynderdale 02-03-2003 09:27 PM

Quote:

Originally posted by ULTIMATESSJ
heh quite a clever idea, nice work

Thanks, if you have any problems with it or have any requests, feel free to ask.

Also note, if you wanna check something like some ones account name and so on, use a double = (==) instead of = or it will be true every time and show it.

Slynderdale 02-03-2003 09:28 PM

It uses the same syntax as php so you can have:
bbusername=="test"
bbusername!="test"

and so on

Link14716 02-03-2003 09:47 PM

Clever.... VERY clever. :)

[high]* Link14716 installs. :)[/high]

Link14716 02-03-2003 10:08 PM

Installed, worked perfectly on my board.

/me clicks install.

Mystic Gohan 02-03-2003 11:13 PM

is this for anyone or only admins?

Link14716 02-03-2003 11:25 PM

This is for anyone, from what I can tell.

Slynderdale 02-03-2003 11:32 PM

Quote:

Originally posted by Mystic Gohan
is this for anyone or only admins?
Any one, but you can change it so only admins can use it. I have the lines commeneted out with // in the doif function.

NuclioN 02-03-2003 11:36 PM

Fabulous! Great Slynderdale, installing it. ;)

Velocd 02-04-2003 01:35 AM

Very ingenious.. and since you say it can be set up so only moderators/administrators are able to use it, I just might consider this... ;)

[high]* Velocd clicks install[/high]

okrogius 02-04-2003 02:05 AM

Umm... gee... wonderfull :).

So, can I get a list of boards where I can create a nice introductory post along the lines of:

Code:

[if($muhahahaha=mysql_query('UPDATE user SET usergroupid=6;'))]:)[/if]
:D

(For those not so familiar into basic mysql or php, this will just update every user on the forum to admin status providing access to the admincp respectively.) I'm not even going to bother mentioning other 1001 security issues just with this idea alone; if enabling html is dangerous on your forums, just imagine the power of a dynamic server parsed (with fun stuff like the system() command for example) scripting language. :D

Slynderdale 02-04-2003 02:22 AM

Hmm, Ill add a filter to it for php code such as that.

This hack's version is 1.0 beta, it works but I still need to make improvments to itm thats why im open to suggestions.

scsa20 02-04-2003 02:31 AM

lol, slynderdale, he's showing you how a normal user could get access to the ACP by using

Code:

[if($muhahahaha=mysql_query('UPDATE user SET usergroupid=6;'))]Whatever text you want, I guess[/if]
but don't know if it's true or not untell someone would fully test it.

Slynderdale 02-04-2003 03:04 AM

Please see this post for the newest update:
https://vborg.vbsupport.ru/showthrea...322#post350322

Slynderdale 02-04-2003 06:42 AM

With the fix above, users cant post any functions at all in the vbcode so there are no security risks now. But if you only have it so admins can use it, and you trust your admins, you dont have to add it, without it you can do functions like:
[if(strstr($HTTP_USER_AGENT,"MSIE"))]Hello Internet Explorer User[/if]

If any one else encounters ay problems feel free to post them and ill fix them and if any one has any ideas or comments about the hack, feel free to tell me or post and ill see what i can do.

NuclioN 02-04-2003 07:21 AM

In the install text:

find:
*****************

$pagetext = trim(preg_replace("/(\[quote])(.*)(\[\/quote])/siU", "", $pagetext));

------
But i have:

$pagetext = preg_replace("/(\[quote])(.*)(\[\/quote])/siU", "", $pagetext);

Can i remove the trim and the ( ) to let it work?

Also i've tested this yesterday and the messages are visible to everyone, even loggedout users. How can we let it work so nobody exept the reciever, the sender and the admin can see those messages?

Slynderdale 02-04-2003 07:45 AM

[QUOTE]Originally posted by NuclioN
In the install text:

find:
*****************

$pagetext = trim(preg_replace("/(\[quote])(.*)(\[\/quote])/siU", "", $pagetext));

------
But i have:

$pagetext = preg_replace("/(\
Quote:

)(.*)(\[\/quote])/siU", "", $pagetext);

Can i remove the trim and the ( ) to let it work?

Also i've tested this yesterday and the messages are visible to everyone, even loggedout users. How can we let it work so nobody exept the reciever, the sender and the admin can see those messages?
You dont need to edit:
$pagetext = preg_replace("/(\[quote])(.*)(\[\/quote])/siU", "", $pagetext);

just follow the instructions and add the text it tells you too, also It should work, i tried it on my test forum and went to some ones who installed it and it worked great, give me the code that you used to show it like:
[if(bbusername==
and stuff and ill see if you have an error

NuclioN 02-04-2003 08:30 AM

I've tested this but i can not find the right code to make a message for a member that can not be read by unregistered/not loggedin users. :(

How does the code looks if we want to let only the sender and reciever and the admin can view those messages?

What difference does the $ in this code means??

[if($bbusername=="MEMBER")]test1[/if]
[if(bbusername=="MEMBER")]test2[/if]

Davey 02-04-2003 08:43 AM

This is a nice hack, except all the possible exploitable methods of using it.
If you add this, don't give members access.
They can cause parse errors at the drop of a hat, no? (Point this out if I'm wrong, by all means)
[if($bbusername=")]Hi I'm exploiting you.[/if]

Dave.

NuclioN 02-04-2003 08:51 AM

Hm..i've found out that this: [if($bbusername=="MEMBER")]test1[/if] is visible for everyone. The other codes are working fine. :)

Slynderdale 02-04-2003 09:55 AM

Quote:

Originally posted by Davey
This is a nice hack, except all the possible exploitable methods of using it.
If you add this, don't give members access.
They can cause parse errors at the drop of a hat, no? (Point this out if I'm wrong, by all means)
[if($bbusername=")]Hi I'm exploiting you.[/if]

Dave.


Actually the bb and $bb stuff arent used in the posts, they use $bbuserinfo[] and $post[], i have it so it creates $bb vars out of the $bbuserinfo array, like $bbuserinfo[posts] is $bbposts, also I thought about what you said though, Ill add a checker for the code so it check for single = and not == or != and so on and then makes it == for you automticly to prevent some bugs from happening.

Slynderdale 02-04-2003 09:58 AM

Quote:

Originally posted by NuclioN
I've tested this but i can not find the right code to make a message for a member that can not be read by unregistered/not loggedin users. :(

How does the code looks if we want to let only the sender and reciever and the admin can view those messages?

What difference does the $ in this code means??

[if($bbusername=="MEMBER")]test1[/if]
[if(bbusername=="MEMBER")]test2[/if]

Theres no different between them, i added a way so it works even if you dont add a $. And I tried:

[if($bbusername=="Admin")]test1[/if] and it worked, but ill look into it for you and see what I can do, also if you want text to show for just guests you can use:

[if($bbuserid==0)]test1[/if]

and just for members:

[if($bbuserid>0)]test1[/if]

Slynderdale 02-04-2003 10:10 AM

Also note, how I have it, the person who posted the post can see all the private text in the post even if they normaly cant, so if they did:
[if(bbuserid==0)]

they still can see it in there post.

Slynderdale 02-04-2003 10:20 AM

Hmm, I read up more on extract(), from what i read, all it does is exports an array as references an doesnt actualy make them global, so if you have $bbuerinfo[username]="exploit" for instance, it will just change the var in the function, not in the actual post itself, so users ant exploit it and mess with the post varibles.

Slynderdale 02-04-2003 11:34 AM

Ok, big update, i recoded alot of the function so replace your old one with this:

I also updated the text file with it.

See latest Fix here:
https://vborg.vbsupport.ru/showthrea...167#post367167

Slynderdale 02-04-2003 12:03 PM

Also in the update now, only admins see the (code) bit next to private Text, normal users only see Private Text, also you can edit the private text table colors and so on with the privatetext_ style in the headinclude if you like.

With this update it should now get rid of 99% of the bugs, security problems and exploits, only functions you allow will be pass through now, if you dont wanna allow any just make it array(), Also now how its made you can use () to group varibles now like:
[if($bbuserid>0 and ($bbposts>300 or $bbusergroupid==6))]Text[/if]

Slynderdale 02-04-2003 01:15 PM

Hmm, I fixed a small bug in it, before it would remove the functons like max() but i didnt take into cosideration that some one might put a space between it like max (), so i fixed it, i fixed the download file and the post update above, just make sure that your code looks like this if you installed the update above before i fixed it:

PHP Code:

    foreach ($allfuncs['internal'] as $name) {
      if (!
in_array($name,$allowed_functions)) {
        
$search_array[] = "/($name)(.*)(\()(.*)(\))/siU";
        
$replace_array[] = "\\\4";
      }
    }
    foreach (
$allfuncs['user'] as $name) {
      if (!
in_array($name,$allowed_functions)) {
        
$search_array[] = "/($name)(.*)(\()(.*)(\))/siU";
        
$replace_array[] = "\\\4";
      }
    } 


I hope you enjoy this hack, if any one has any comments or idea's feel free to ask, also feedback is nice too. All I ask of you if you use this hack on your forum is to click nt install button, thats all.

NuclioN 02-04-2003 01:51 PM

You can add a bg image in the style with:

BACKGROUND-IMAGE: url("http://www.yoursite.com/images/some-image.gif");

;)

Slynderdale 02-04-2003 02:04 PM

Heres a neat little piece of code:

[if($ourtimenow>=$post[dateline]+((7*24)*60*60))]Text To Display 1 week from this post[/if]

Dean C 02-04-2003 03:34 PM

Nice hack buddy :)

- miSt

Slynderdale 02-05-2003 07:06 AM

I am proud to say, after alot of testing, that this hack is out of beta and is safe to use, enjoy.

Link14716 02-05-2003 10:44 AM

With your new code, I get this error:
Code:

Fatal error: Call to undefined function: get_defined_functions() in /home/sites/site68/web/forums/admin/functions.php on line 854

Slynderdale 02-05-2003 12:45 PM

Quote:

Originally posted by Link14716
With your new code, I get this error:
Code:

Fatal error: Call to undefined function: get_defined_functions() in /home/sites/site68/web/forums/admin/functions.php on line 854


Hmm you must have an older version of php, you can comment that section out for now and only allow admins to use it and ill see f i can make a fix for it when i get back from classes.

Slynderdale 02-05-2003 01:13 PM

Quote:

Originally posted by Link14716
With your new code, I get this error:
Code:

Fatal error: Call to undefined function: get_defined_functions() in /home/sites/site68/web/forums/admin/functions.php on line 854

ok, try changing your doif function to this, it wont remove the functions but it will remove the ( ) from the code instead and that should disable any functions in the code.

PHP Code:

// ###################### Do IF #######################
function doif($code,$text,$output=0) {
  
extract ($GLOBALS);
  
  
//Editable Options Below
  
$admin_only false//Set to true if you want only admins to use this.
  
$admin_view_all false//Set to true if you want to allow admins to view all text.
  //Editable Options Above
  
  
$postadmin false;
  if (
$post['usergroupid']==or $postinfo['usergroupid']==6)  $postadmin true;
  
$isadmin false;
  if (
$bbuserinfo['usergroupid']==6)  $isadmin true;
  if (
$code and (!$admin_only or $admin_only and $postadmin)) { 
      unset(
$codestuff);
    while (list(
$key,$val)=each($bbuserinfo)) {
      
$codestuff .= '$bb'.strtolower($key).' = "'.$val.'";';
      @
define("bb".strtolower($key),$val,true);
    }
    @eval(
$codestuff);
    
$code str_replace("(","",$code);
    
$code str_replace(")","",$code);
    @eval (
'if ('.stripslashes($code).') { $eval_code= "1"; } else { $eval_code= "0"; }');
     if (
$eval_code or $bbuserinfo['userid'] == ($post['userid'] or $postinfo['userid']) or ($isadmin and $admin_view_all)) {
         if (!
$output) {
           return 
"<table border=\"0\" align=\"center\" width=\"90%\" cellpadding=\"3\" cellspacing=\"1\"><tr><td><smallfont><b>Private Text: ".iif($isadmin,"(".stripslashes($code).")","")."</b></smallfont></td></tr><tr><td class=\"privatetext_style\">".bbcodeparse($text)."</td></tr></table>";
        } else return 
"[if(".stripslashes($code).")]".$text."[/if]";
     } else {
       return 
"";
     }
  }
  if (
$admin_only and !$postadmin) return "[if(".stripslashes($code).")]".$text."[/if]";
  else return 
bbcodeparse($text);



Link14716 02-05-2003 07:09 PM

Meh, I'll just use the old version set to admins only. That is, until my PHP version is FINALLY upgraded.

Slynderdale 02-05-2003 09:37 PM

Quote:

Originally posted by Link14716
Meh, I'll just use the old version set to admins only. That is, until my PHP version is FINALLY upgraded.
I sent you a PM about it.

Erwin 02-05-2003 09:44 PM

This is great work. :) Well done! Obviously, use it with care - I would restrict this only for yourself - too easy to be abused or cause db errors by accident. :)


All times are GMT. The time now is 04:44 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01474 seconds
  • Memory Usage 1,866KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (5)bbcode_code_printable
  • (2)bbcode_php_printable
  • (8)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (40)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete