Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!goblin3!goblin2!goblin.stu.neva.ru!newsfeed.xs4all.nl!newsfeed3.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.001 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'python.': 0.02; 'operator': 0.03; 'irc': 0.05; 'tree': 0.05; 'subject:Python': 0.06; '21,': 0.07; 'attribute': 0.07; '22,': 0.09; 'function,': 0.09; 'to)': 0.09; 'typed': 0.09; 'cc:addr:python-list': 0.11; 'accepting': 0.14; '"enter': 0.16; '(written': 0.16; 'ast': 0.16; 'calculator': 0.16; 'from:addr:rosuav': 0.16; 'from:name:chris angelico': 0.16; 'limiting': 0.16; 'literal.': 0.16; 'parse,': 0.16; 'sat,': 0.16; 'wrote:': 0.18; 'code.': 0.18; 'not,': 0.20; 'rules': 0.22; 'cc:addr:python.org': 0.22; 'cc:2**0': 0.24; 'least': 0.26; 'header:In-Reply-To:1': 0.27; 'chris': 0.29; 'am,': 0.29; 'message-id:@mail.gmail.com': 0.30; 'code': 0.31; 'node': 0.31; 'pickle': 0.31; '(i.e.': 0.33; 'fri,': 0.33; 'not.': 0.33; 'sense': 0.34; 'maybe': 0.34; 'could': 0.34; "can't": 0.35; 'classes': 0.35; 'no,': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'there': 0.35; 'acceptable': 0.36; 'done': 0.36; 'possible': 0.36; 'clear': 0.37; 'sometimes': 0.38; 'nov': 0.38; 'process,': 0.38; 'work?': 0.38; 'anything': 0.39; 'channel': 0.39; 'access,': 0.60; 'removing': 0.60; 'entire': 0.61; 'strictly': 0.61; "you're": 0.61; 'times': 0.62; 'act': 0.63; 'more': 0.64; 'number:': 0.66; 'walk': 0.74; '2014,': 0.84; 'ever.': 0.84; 'fine...': 0.84; 'subject:Using': 0.84; 'to:none': 0.92 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:cc :content-type; bh=xnawHB6jyntvVqRZF/01ZYw17a7jvMUq0dseYa6E/0Y=; b=RLRKCsCsjAF67Li/FkwJ1/CFtKePcN+7XeVBlFA4M5L21iXA5/KeiH/0zpFR+kaV75 9Sa9+U1yU9Kn4s7Rr1mnfTRjgTV+veB17xbLaup9GgBKA3ulWNgOXSF4FmhO0V8A+Pgw 6tULL3MjtV6v6xjVpAj9FL5mKw/g0ZV67t4PFU+vk46pToxGfq2VOj9KqAK54J8tnzNG 6+dB4jQdavbvY0zbyY1bbh35j9ss+64hc41Y6ZBPNIzODSrT98HnbRKflh60hRor6gd+ Ot/eaxQ5zZowuXN1ZDqU31UodheSp94eA6gcxaXAz3fgdbYHxyKQ/sWZxjksb9zMTcWO aR+A== MIME-Version: 1.0 X-Received: by 10.42.110.195 with SMTP id r3mr12904985icp.12.1416578887618; Fri, 21 Nov 2014 06:08:07 -0800 (PST) In-Reply-To: <1416578293.597072.193784725.1C8E5BD1@webmail.messagingengine.com> References: <0yEbw.852077$KL.733426@fx19.am4> <1416578293.597072.193784725.1C8E5BD1@webmail.messagingengine.com> Date: Sat, 22 Nov 2014 01:08:07 +1100 Subject: Re: Using Python for date calculations From: Chris Angelico Cc: "python-list@python.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 30 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1416578890 news.xs4all.nl 2897 [2001:888:2000:d::a6]:35927 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:81207 On Sat, Nov 22, 2014 at 12:58 AM, wrote: > On Fri, Nov 21, 2014, at 05:47, Chris Angelico wrote: >> Now, maybe you want it to eval. There are times when I conceptually >> want "enter an integer", but it makes good sense to be able to type >> "1+2" and have it act as if I typed "3". That's fine... but if you >> want eval, write eval into your code. Be explicit: >> eval(raw_input("Enter a number: ")) makes it very clear that you're >> accepting code at the console. > > Out of curiosity, is there a way to use eval "safely" (i.e. strictly > limiting what it has access to) across a privilege boundary? This also > comes up for pickle and other serialization formats that can store > arbitrary classes (i.e. call arbitrary constructors). No, there is not. Not in Python. You can sandbox the entire process, but you can't eval less-privileged code in a more-privileged process, ever. > I remember an IRC channel I sometimes go in has a chatbot (written in > perl) which has a calculator function, it goes with the low-tech > solution of removing via regex anything that isn't an operator or a > number literal. Would ast.literal_eval work? If not, it would at least be possible to do an AST parse, then walk the tree and see if there's anything that isn't an acceptable node type. There'd have to be draconian rules (no attribute access, for instance), but it could be done more intelligently than regex. ChrisA