(This data is current through block 535276.)
Based on block timestamps (which do not have to be accurate), the longest difference between successive blocks is 463160 seconds (5 days, 8 hours, 39 minutes, 20 seconds) between blocks 0 and 1. The second longest is 90532 seconds (1 day 1 hour 8 minutes 52 seconds) between blocks 15323 and 15324.
For "shortest", since timestamps are not strictly enforced and can be fudged accidentally or intentionally, it is possible for a block to have an earlier timestamp than its predecessor, by up to 2 hours (7200 seconds), in which case the time difference is negative. This has happened 13828 times. The most negative difference is −7125 seconds (1 hour 58 minutes 45 seconds) between blocks 156113 and 156114.
There have been 222 blocks with the same timestamp as their predecessor, giving a difference of 0.
The script I used to gather this data is at https://github.com/neldredge/bitcoin-blocks.
Actual block intervals are hard to know precisely, since we have no way of knowing for sure the actual time at which each block was mined. Some sites like blockchain.info record the first time at which their node received the block, but there is an unknown propagation delay between the time a block is actually mined and the time at which some other node receives it (though for a well connected node it is probably not much more than 1 second). It is also possible to receive blocks out of order, so the difference in receive times could also be negative. Moreover, such data is obviously not available for early blocks before the existence of the site in question.
In principle it could be possible to look for the longest and shortest difference between receive times, but I don't know how to retrieve that data in bulk.